我很确定这个问题是重复的,但我的代码在这里有所不同,以下是我的代码.它失败了“未定义的符号”错误,不确定丢失了什么.
class Parent { public : virtual int func () = 0; virtual ~Parent(); }; class Child : public Parent { public : int data; Child (int k) { data = k; } int func() { // virtual function cout<<"Returning square of 10\n"; return 10*10; } void Display () { cout<<data<<"\n"; } ~ Child() { cout<<"Overridden Parents Destructor \n"; } }; int main() { Child a(10); a.Display(); }
以下是编译时的O / P.
Undefined symbols for architecture x86_64: "Parent::~Parent()",referenced from: Child::~Child() in inher-4b1311.o "typeinfo for Parent",referenced from: typeinfo for Child in inher-4b1311.o "vtable for Parent",referenced from: Parent::Parent() in inher-4b1311.o NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
解决方法
未定义Parent ::〜Parent().
您可以将定义直接放入类定义中:
class Parent { public : virtual int func () = 0; virtual ~Parent() {}; };
或者单独定义它.或者,从C 11开始,写入virtual~Parent()= default;.
无论如何,析构函数需要一个定义.