【发布时间】:2011-09-25 12:17:40
【问题描述】:
由于一个奇怪的 ld 错误,我一直在用头撞墙很长时间。 所以我把它复制在一个小测试用例中来理解这个问题。
我声明了一个类,并在头文件中派生了另一个类:
class BaseClass {
public:
BaseClass(){};
virtual void func(){};
};
class DerivedClass: public BaseClass {
public:
DerivedClass();
void func();
};
然后我定义了构造函数但忘记定义func(这里是自愿的,但实际上我用愚蠢的复制/粘贴...):
DerivedClass::DerivedClass(){
cout << "Derived constructor" << endl;
}
//void DerivedClass::func(){
// cout << "Derived func" << endl;
//}
然后我得到:
对 `vtable for DerivedClass' 的未定义引用
编辑:消息指向构造函数的声明!
如果我取消注释func 的定义,那么我没有错误。所以我的问题:
为什么链接器没有告诉我缺少func 的定义?
当您有经验时,解决方案可能很明显,但对于像我这样的初学者来说,这不是!
感谢您的帮助。
【问题讨论】:
-
可能重复 stackoverflow.com/questions/1095298/… 和 stackoverflow.com/questions/7334269/… 和 stackoverflow.com/questions/5511973/… 任何其他人。此外,GCC 常见问题解答中也回答了这个问题。 gcc.gnu.org/faq.html#vtables
-
@RaymondChen:即使有点粗鲁,您对 GCC 常见问题解答链接的回答也有助于理解问题。我为你 +1 了!
-
@ChristianRau:Eclipse 中的 GCC!