0

面積と周長を持つ基本クラスであるポリゴンというクラスがあり、そこから長方形クラスを派生させる必要があります。現在、以下のプログラムは機能せず、次のエラーが表示されます。

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");
}
4

2 に答える 2

2

クラスでデストラクタを宣言しました。しかし、あなたはそれらを定義したことはありません。関数を宣言したのに、定義に失敗するのはなぜですか? と を宣言polygon::~polygon()rectangle::~rectangle()ました。どちらも定義されていません。

あなたは基本的にコンパイラに嘘をついています。関数を宣言することで約束をし、それを定義しないことでその約束を破ります。したがって、エラー。

PS そしてそれはint main()、ではありませんvoid main()

于 2012-12-15T02:15:23.973 に答える
0

デストラクタを追加しませんでした。追加したと言いましたが、実際には追加していません。したがって、リンカーはそれらを探していますが、見つけられません。

次のように変更できます。

            ~rectangle();

            ~rectangle() { ; }
于 2012-12-15T01:28:01.933 に答える