C++链接报错:未显式调用构造函数却出现undefined reference错误
错误原因
你遇到的是链接阶段的符号未定义错误,所有代码的语法都是正确的,问题出在编译链接环节:Character类的构造函数、damage成员函数的实现都写在Character.cpp里,你生成可执行文件的时候没有把该文件对应的编译产物加入链接队列,导致链接器找不到这两个函数的实现。
解决方法
- 如果你是手动通过g++/clang编译,直接把所有相关源文件都加入编译指令即可,示例指令:
g++ main.cpp Warrior.cpp Character.cpp -o game
- 如果你是用IDE开发,确认
Character.cpp已经被添加到当前项目的源文件列表中,IDE默认只会编译项目内的源文件参与链接。
额外优化建议
Character类的health成员是double类型,但getHealth返回值是int,会存在精度损失,建议将返回值修改为double。Warrior::attack中直接对Character&做dynamic_cast到Warrior&,如果对手不是Warrior类型会触发运行时异常,建议先通过getType()判断对手类型为WARRIOR后再做类型转换。- 不要在头文件中写
using namespace std;,会引入全局命名空间污染,建议替换为std::string这类带命名空间的写法。
内容的提问来源于stack exchange,提问作者Nicholas Halim
相关产品推荐
相关产品推荐

