C++单例类头文件定义调用宏触发undefined reference链接错误问题
问题原因
- 核心链接错误
undefined reference to A::A():你在类A的私有域仅声明了无参构造函数A(),未提供任何实现。A::inst()中创建静态A实例时需要调用该构造函数,链接阶段找不到对应的函数定义就会抛出该错误。 - 首次单独编译a.cpp时报
undefined reference to main:直接编译a.cpp为可执行文件时,程序需要入口函数main(),但a.cpp中不存在该函数。若仅需编译a.cpp为目标文件,需添加编译参数-c。 - 你定义的
ALERT宏本身符合C++语法要求,不存在实现方式不可行的问题。
解决方法
- 在a.cpp中补充类A私有构造函数的实现,没有初始化逻辑留空即可:
A::A() { // 可按需添加构造初始化逻辑 }
- 编译时同时链接所有相关编译单元,示例命令:
# 编译a.cpp为目标文件 g++ -c a.cpp -o a.o # 编译测试代码并链接a.o生成可执行文件 g++ test.cpp a.o -o test
内容的提问来源于stack exchange,提问作者harsh82
相关产品推荐
相关产品推荐

