0

これは私の基本クラスの Shape.h です

#ifndef Shape_H
#define Shape_H

#include <iostream>
using namespace std;

class Shape
{
    protected:
    string name;
    bool containsObj;

public:
    Shape();
    Shape(string, bool);
    string getName();
    bool getContainsObj();
    double computeArea();
};

   #endif

シェイプ.cpp

#include "Shape.h"

Shape::Shape(string name, bool containsObj)
{
    this -> name = name;
    this -> containsObj = containsObj;
}
string Shape:: getName()
{
return name;
}
bool Shape::getContainsObj()
{
    return containsObj;
}

これが私のサブクラスです。Cross.h

#ifndef Cross_H
#define Cross_H

#include <iostream>
#include "Shape.h"
using namespace std;

class Cross: public Shape
{
protected:
    int x[12];
    int y[12];
public:
    Cross();
    double computeArea();

};

#endif

Cross.cpp

#include "Cross.h"

Cross::Cross()
{

    for (int i = 0; i < 12; i++)
    {
        this -> x[i] = 0;
        this -> x[0] = 0;
    }

}

Shape と Cross は別のファイルにありますが、同じフォルダー内にあります。奇妙なことに、これをコンパイルすると、「関数 'ZN5CrossC1Ev'、Shape::Shape() への未定義参照、'ZN5CrossC1Ev'、Shape::Shape() への未定義参照など、これまでに見たことのないエラーが発生しました。 、WinMain@16 への未定義の参照".

私は自分でデバッグを試みました。Cross コンストラクターを削除すると、正常に動作します。しかし、私は間違いなくそれが必要です。誰かが私にこれを説明できますか?

4

2 に答える 2

4

デフォルトのコンストラクターを定義しませんでしたが、宣言しましたShape();。定義した唯一のコンストラクターは、stringおよびboolparametersを持つものShape(string, bool);です。

追加

Shape::Shape()
{
}

または削除

Shape();

それを修正します。


将来のデバッグのために、エラーをより注意深く読んでください。何が間違っているのかを正確に説明しています。

undefined reference to Shape::Shape()
于 2013-10-25T16:17:00.187 に答える
2

のデフォルト コンストラクタを宣言しましたが、Shapeどこにも定義していません。の既定のコンストラクターCrossは、それを暗黙的に使用して、その基本クラスを初期化します。

オプションは次のとおりです。

  • Shapeデフォルトで構築可能にしたい場合は、コンストラクターを定義します。
  • それ以外の場合は、宣言を削除して、他のコンストラクターでCross初期化します。Shape
于 2013-10-25T16:17:59.150 に答える