我有一个名为polygon的类,它是我的基类,我有区域和周长,我需要从中派生一个矩形类。现在,下面的程序无法正常工作,它给了我以下错误:
GS_Inheritance_Program.obj : error LNK2019: unresolved external symbol "public: virtual
__thiscall rectangle::~rectangle(void)" (??1rectangle@@UAE@XZ) referenced in function
"public: virtual void * __thiscall rectangle::`scalar deleting destructor'(unsigned int)"
(??_Grectangle@@UAEPAXI@Z)
这是由于我添加到程序中的析构函数,但是当我删除它们时它都有效。 我做了一些研究,发现可能是因为我没有正确编译程序.cpp文件。那是我的问题吗?如果没有,我的问题是什么?
#include <iostream>
using namespace std;
class polygon
{
protected:
double area;
double perimeter;
public:
polygon(){}
~polygon();
double printperimeter();
double printarea();
};
double polygon::printperimeter()
{
return perimeter;
}
double polygon::printarea()
{
return area;
}
class rectangle:public polygon
{
protected:
double length;
double width;
public:
rectangle(double = 1.0, double = 1.0);
~rectangle();
double calcarea();
double calcperimeter();
};
rectangle::rectangle(double l, double w)
{
length = l;
width = w;
}
double rectangle::calcarea()
{
area = length*width;
return printarea();
}
double rectangle::calcperimeter()
{
perimeter = 2*(length+width);
return printperimeter();
}
void main()
{
rectangle rect_1 (9.0, 5.0);
cout<<"The Area of Rect_1 is " <<rect_1.calcarea() <<endl;
system("pause");
}
答案 0 :(得分:2)
您在班级中声明了析构函数。但你从未定义过它们。为什么要声明函数然后无法定义它们?您声明了polygon::~polygon()
和rectangle::~rectangle()
。但两者都没有定义。
你基本上对编译器撒谎。你通过声明一个函数来做出承诺,然后通过不能定义它来打破这个承诺。因此错误。
P.S。那是int main()
,而不是void main()
。
答案 1 :(得分:0)
您没有添加析构函数。你说你添加了它们,但实际上并没有添加它们。所以链接器正在寻找它们而不是找到它们。
你可以改变:
~rectangle();
到
~rectangle() { ; }