如何在C++多文件中导入类并解决g++链接未定义引用错误
问题分析与解决方案
错误原因
你遇到的undefined reference错误是因为链接阶段找不到成员函数的具体实现:
header.h里只声明了example类和sum函数的原型,没有函数的具体代码;- 单独编译
main.cpp时,链接器无法找到example::sum的实现代码(该代码在cpp.cpp中),因此报错。
另外需要注意:你的cpp.cpp中也存在一个main函数,这会导致后续编译时出现multiple definition of main错误,必须删掉cpp.cpp中的main函数——一个C++程序只能有一个入口函数main。
解决方法
方法1:一次性编译所有相关源文件
在PowerShell中执行以下命令,将main.cpp和cpp.cpp一起传给g++,编译器会分别编译两个文件,再自动链接生成可执行文件:
g++ main.cpp cpp.cpp -o main.exe
执行完成后直接运行./main.exe即可得到结果。
方法2:分步编译目标文件再链接
如果项目文件较多,分步编译更便于管理:
- 先编译
cpp.cpp为目标文件(只编译不链接,生成.o格式的中间文件):
g++ -c cpp.cpp -o cpp.o
- 再编译
main.cpp并链接刚才生成的cpp.o文件:
g++ main.cpp cpp.o -o main.exe
针对USB项目的适配逻辑
对于包含usb.h和usb.cpp的项目,处理逻辑完全一致:
- 主程序文件(如
main.cpp)只需包含#include "usb.h"; - 编译时必须将
usb.cpp纳入编译流程:要么用方法1一次性编译g++ main.cpp usb.cpp -o usb_app.exe,要么用方法2先编译usb.cpp为目标文件再与主程序链接。
内容的提问来源于stack exchange,提问作者Kishore Kumar S
相关产品推荐
相关产品推荐

