编译时链接错误怎么会事!

nbnitboy 2008-08-04 10:50:58
Compiling...
Manage_Salary.cpp
Linking...
Manage_Salary.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall Employee::set_salary(double)" (?set_salary@Employee@@UAEXN@Z)
Manage_Salary.obj : error LNK2001: unresolved external symbol "public: virtual double __thiscall Employee::get_salary(void)" (?get_salary@Employee@@UAENXZ)
Debug/Salary_Manage.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.

Salary_Manage.exe - 3 error(s), 0 warning(s)

以上是编译出现的情况,请问错在哪了?
...全文
77 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
nbnitboy 2008-08-04
  • 打赏
  • 举报
回复
对了!
hai040 2008-08-04
  • 打赏
  • 举报
回复
如果不定义加上=0
应该会有编译错误
richbirdandy 2008-08-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 nbnitboy 的回复:]
基类中的虚函数也要定义吗?
[/Quote]纯虚函数不用定义 虚函数还是要定义的
虚函数表示你提供了一个接口和默认的实现 并允许派生类覆盖
如果不是这样 就声明纯虚函数 表示仅提供一个接口
yyyapple 2008-08-04
  • 打赏
  • 举报
回复
你可以定义为纯虚函数
晨星 2008-08-04
  • 打赏
  • 举报
回复
虚函数当然也要定义了。除非是纯虚的。
纯虚函数可以不要定义,但前提是你没有引用,一旦引用了,也要定义,最常见的是纯虚的析构函数,常常必需定义。

虚函数,既使你没有调用过,在大多数编译器中,它也同样被“引用”了。因为在大多数编译器中,虚函数的地址将被写入到类的虚函数表中,函数的地址就是它的入口,如果你根本没定义它,它哪来的入口?
nbnitboy 2008-08-04
  • 打赏
  • 举报
回复
基类中的虚函数也要定义吗?
晨星 2008-08-04
  • 打赏
  • 举报
回复
“unresolved external symbol”,未解决的外部符号。意思就是说,编译好了之后,连接器在连接整个工程的时候,发现有些代码引用了set_salary和get_salary这两个符号,但找遍了所有的obj,还有从工程选项中引入的lib,都没有找到这两个符号的定义。
晨星 2008-08-04
  • 打赏
  • 举报
回复
可能是set_salary和get_salary这两个函数只有声明没有定义。
yyyapple 2008-08-04
  • 打赏
  • 举报
回复
这两个函数有没有定义?

64,691

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧