C++使用类头文件开发时出现undefined reference to function报错
问题原因
这个报错属于链接阶段错误,和代码语法无关。C++中每个.cpp文件是独立的编译单元,你单独编译main.cpp时,编译器仅能通过引入的Cat.h看到Cat::speak()的函数声明,找不到该函数的具体实现。如果编译链接流程没有把Cat.cpp纳入处理范围,链接器就会抛出“未定义引用”的报错。
你直接#include "Cat.cpp"能解决问题的本质是,预编译阶段把Cat.cpp的全部代码插入到了main.cpp中,相当于二者合并成了同一个编译单元,编译时自然能找到函数实现,但这种做法完全不符合C++工程规范,项目体积稍大就会触发重复定义、全量编译耗时过长等问题,不建议使用。
正确解决方法
根据你使用的编译工具,对应操作即可:
- 如果你使用命令行编译(以GCC为例),直接把所有涉及的
.cpp文件同时传入编译指令即可,示例命令:
编译完成后运行生成的g++ main.cpp Cat.cpp -o CatDemoCatDemo可执行文件即可正常输出结果。 - 如果你使用IDE(如Visual Studio、CLion、Dev-C++等),只需要确认
Cat.cpp已经被添加到当前项目的文件列表中,IDE会自动把所有项目内的.cpp文件纳入编译链接流程,不会再出现该报错。
内容的提问来源于stack exchange,提问作者softcactus
相关产品推荐
相关产品推荐

