C++正确包含头文件仍出现Abc类成员函数链接错误
C++ 链接器 undefined reference 错误原因与解决
错误诱因
- 你执行的编译命令仅传入了
main.cpp,完全没有包含存放类成员函数实现的Functions.cpp。 - C++编译流程分两个阶段触发不同的校验规则:
- 编译阶段:仅处理传入的单个cpp文件,检查语法正确性、是否存在被调用函数的声明。因为
testing.h中已经声明了Abc::input()和Abc::display(),所以单独编译每个cpp文件都能通过,不会报错。 - 链接阶段:整合所有编译生成的目标文件,查找被调用函数的实体实现。你没有将
Functions.cpp编译产生的目标文件纳入链接流程,链接器找不到两个成员函数的具体实现代码,就会抛出未定义引用的错误。
- 编译阶段:仅处理传入的单个cpp文件,检查语法正确性、是否存在被调用函数的声明。因为
解决方法
- 把项目中所有依赖的cpp源文件都传入g++编译命令,执行:
g++ -Wall -o main main.cpp Functions.cpp
该命令会自动完成两个源文件的编译、目标文件的链接流程,最终生成可执行程序main。
补充:当项目规模变大、源文件数量较多时,不建议手动枚举所有cpp文件,可借助Makefile、CMake等构建工具自动管理编译流程,避免漏写源文件导致的同类链接错误。
内容的提问来源于stack exchange,提问作者Abdullah0123
相关产品推荐
相关产品推荐

