You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何该简易C++程序链接失败?请解析问题原因

问题原因与解决方法

你的链接错误根源在于data.cpp的写法完全错误,同时头文件data.h也存在缺陷:

  1. 头文件缺失私有成员声明
    类的完整定义必须包含所有成员(包括私有成员),否则包含该头文件的源文件无法获取类的完整结构。你原本的data.h里没有声明content私有成员,这不符合C++类的定义规范。

  2. 实现文件重新定义了类
    在data.cpp里,你重新写了整个Data类,这相当于创建了一个和头文件中Data完全无关的类。链接器在处理test.o时,寻找的是头文件中声明的Data::Data()、Data::set(int)等成员函数的实现,但data.o里的是另一个类的成员,自然匹配失败,报出"undefined reference"错误。

修正后的代码

修正后的data.h

#ifndef DATA_H
#define DATA_H

class Data {
    private:
        int content; // 补充私有成员声明,保证类定义完整
    public:
        int get();
        void set(int);
        Data();
};

#endif

修正后的data.cpp

#include "data.h"

// 采用「类名::成员函数」的方式实现头文件中声明的成员,而非重新定义类
Data::Data() {}

int Data::get() {
    return content;
}

void Data::set(int value) {
    content = value;
}

验证

保持原编译链接命令不变:

g++ -c test.cpp data.cpp
g++ test.o data.o

此时编译和链接都会正常完成,程序可以运行。

内容的提问来源于stack exchange,提问作者Graham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 14:22:12