自定义头文件编译报错:undefined reference问题求助
解决
undefined reference to N::my_class::do_something() 错误 这个错误是链接阶段的问题,并非编译错误,说明链接器找不到N::my_class::do_something()的实现代码。以下是具体解决方法:
1. 编译时包含所有相关源文件
使用g++/gcc编译时,必须将主程序的.cpp文件和my_class.cpp一同参与编译链接,不能仅编译主程序。示例命令:
g++ main.cpp my_class.cpp -o my_program
如果分开编译目标文件,最后也要将所有目标文件链接起来:
g++ -c main.cpp g++ -c my_class.cpp g++ main.o my_class.o -o my_program
2. 检查头文件my_class.h的正确性
头文件必须正确声明命名空间N中的my_class类,以及do_something()成员函数。正确的头文件模板:
#ifndef MY_CLASS_H #define MY_CLASS_H namespace N { class my_class { public: // 必须声明该成员函数,与cpp中的实现一一对应 void do_something(); }; } #endif
若头文件中的类不在N命名空间内,或未声明do_something(),链接器会无法匹配到对应实现。
3. 确认命名空间匹配
你的my_class.cpp中使用了using namespace N;,因此void my_class::do_something()等价于void N::my_class::do_something(),这部分写法没问题,但要确保头文件里的类确实处于N命名空间下,两者的命名空间必须完全一致。
4. 清理旧编译产物后重新编译
如果之前生成过.o目标文件或可执行文件,可能存在缓存异常。删除所有.o文件和已生成的可执行文件,重新执行编译命令。
内容的提问来源于stack exchange,提问作者Dipak Mali
相关产品推荐
相关产品推荐

