请看下面的简单代码:

#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。

最佳答案

没有基类的析构函数的实现。如果您不提供定义,则编译器将隐式创建一个,但是由于您提供了一个定义,因此您还必须提供实现。托尼的评论有答案:

10-02 14:45