C++派生类和虚拟析构函数
C++ derived class and virtual destructor
请查看下面的简单代码:
#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;
}
CCD_ 1是一个低音类,CCD_。当我运行代码时,我得到两个错误如下:
错误1错误LNK2019:未解析的外部符号"public:virtual __thiscall semi_shape_1::~semi_shape _1(void)"(?1semi_shape_1@@UAE@XZ)在函数"public:virtual __thiscall testrongemiShape_1::~testrongemiShape _1(void)"中引用(??1testrongemishae_1@@UAE@XZ)C:\Users\ME\Documents\Visual Studio 2012\Projects\ConsoleApplication1\ConsoleApplication1.obj
错误2错误LNK1120:1个未解析的外部C:\Users\ME\Documents\Visual Studio 2012\Projects\ConsoleApplication1\Debug\ConsoleApplication1.exe 1
请问我的代码有什么问题
计算机:Windows 7。
IDE:visualstudio2012。
只需更改virtual_semi_shape_1();到虚拟~semi_shape_1(){}
您必须为析构函数提供一个定义。
virtual ~semi_shape_1() {}
或在C++11 中
virtual ~semi_shape_1() = default;
或者,如果semi_shape_1
应该是一个抽象类,那么您可以使其成为纯类,但不要忘记在类定义之外定义它:
virtual ~semi_shape_1() = 0;
// ...
semi_shape_1::~semi_shape_1() = default;
您已经声明了一个析构函数,但没有实现它。
相关文章:
- 重载 -> shared_ptr 个实例中的箭头运算符<interface>,接口中没有纯虚拟析构函数
- 是否可以使用函数指针调用虚拟析构函数?
- 在没有动态内存的世界中,我是否需要虚拟析构函数?
- 程序永远不会进入虚拟析构函数
- C++ std::vector 中的虚拟析构函数继承
- 哪种方法更适合处理虚拟析构函数?
- 拥有"受保护的非虚拟析构函数"与"受保护虚拟析构构函数"有什么好处
- 带有未解析外部元素的C++虚拟析构函数
- 即使基类和派生类只使用基元数据类型,我是否需要定义虚拟析构函数
- C++切片和虚拟析构函数
- C++虚拟继承、虚拟析构函数和 dynamic_cast<void*>
- 添加虚拟析构函数会使代码大小膨胀
- 应该是虚拟析构函数吗?但是怎么做呢?
- 虚拟析构函数将对象移出 rodata 部分
- 如何将 std::unique_ptr<Parent> 与具有受保护虚拟析构函数的只读父类一起使用
- DIRECTX9 中自定义顶点的虚拟析构函数
- 为什么缺少虚拟析构函数不会导致内存泄漏?
- std::unique_ptr 在虚拟析构函数上重置 SIGABRT
- C++11 中默认纯虚拟析构函数的正确放置
- 在派生类中重写哪个基类的虚拟析构函数