请看下面的简单代码:
#include <iostream>
using namespace std;
class semi_shape_1 {
public:
void output() { cout <<" semi_shape_1 works fine.\n"; }
virtual ~semi_shape_1();
protected:
semi_shape_1(){ output();}
};
class test_semiShape_1 : public semi_shape_1 {
};
int main()
{
test_semiShape_1 ts1;
return 0;
}
semi_shape_1
是低音类,并且test_semiShape_1
是从其派生的。运行代码时,出现两个错误,如下所示:
错误1 错误LNK2019:未解决的外部符号“public:虚拟__thiscall semi_shape_1::〜semi_shape_1(void)”(?? semi_shape_1 @@ UAE @ XZ)在函数“public:虚拟__thiscall test_semiShape_1::~~ test_semiShape_1(void)”中引用(?? 1test_semiShape_1 @@ UAE @ XZ)C:\ Users \ ME \ Documents \ Visual Studio 2012 \ Projects \ ConsoleApplication1 \ ConsoleApplication1 \ ConsoleApplication1.obj
错误2 错误LNK1120:1未解决的外部C:\ Users \ ME \ Documents \ Visual Studio 2012 \ Projects \ ConsoleApplication1 \ Debug \ ConsoleApplication1.exe 1
请问我的代码有什么问题?
机器:Windows 7。
IDE:Visual Studio 2012。
最佳答案
没有基类的析构函数的实现。如果您不提供定义,则编译器将隐式创建一个,但是由于您提供了一个定义,因此您还必须提供实现。托尼的评论有答案: