这个问题可能是重复的,但是我不确定,因为我的程序在单个文件中。
// my-program.cpp
class A
{
public:
virtual void foo();
};
class B : public A
{
public:
void foo() {}
};
int main()
{
B myB;
}
然后我输入g++ my-program.cpp
终端,编译器给我这个警告:
架构x86_64的未定义符号:“ A的typeinfo”,引用自:Bin cce8BmNY.o的typeinfo“ A的vtable”,引用自cce8BmNY.o中的A :: A()注意:丢失的vtable通常表示第一个非-inline虚拟成员函数没有定义。ld:找不到针对架构x86_64 collect2的符号:ld返回1退出状态
它说没有定义,因为没有定义。您已声明A::foo()
,但尚未定义。
也许您希望它是纯虚拟的(使基类A
抽象):
virtual void foo() = 0;
在这种情况下,它不需要定义,因为它将始终在任何可实例化的类中被覆盖。
或者,也许您希望能够A
直接实例化,在这种情况下,它将需要一个定义。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句