为何该简易C++程序链接失败?请解析问题原因
问题原因与解决方法
你的链接错误根源在于data.cpp的写法完全错误,同时头文件data.h也存在缺陷:
头文件缺失私有成员声明
类的完整定义必须包含所有成员(包括私有成员),否则包含该头文件的源文件无法获取类的完整结构。你原本的data.h里没有声明content私有成员,这不符合C++类的定义规范。实现文件重新定义了类
在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
相关产品推荐
相关产品推荐

