-1

クラス オブジェクト Polygon にクラス オブジェクト Point の配列を作成しようとしています。コンパイル中にいくつかのエラーが発生しました。誰かがこれらのエラーを修正するのを手伝ってくれますか/クラス オブジェクトの配列を作成するより良い方法を提案してくれますか?

コードが削除されました

コンパイルしようとすると、次のエラーが発生します。

 Undefined symbols for architecture x86_64:
      "Point::MAX_VAL", referenced from:
          Point::Point() in ccyVCyNB.o
          Point::Point() in ccyVCyNB.o
          Point::Point(float, float)in ccyVCyNB.o
          Point::Point(float, float)in ccyVCyNB.o
          Point::set(float, float)in ccyVCyNB.o
          Point::setRange(float, float)in ccyVCyNB.o
      "Point::MIN_VAL", referenced from:
          Point::Point() in ccyVCyNB.o
          Point::Point() in ccyVCyNB.o
          Point::Point(float, float)in ccyVCyNB.o
          Point::Point(float, float)in ccyVCyNB.o
          Point::set(float, float)in ccyVCyNB.o
          Point::setRange(float, float)in ccyVCyNB.o
    ld: symbol(s) not found for architecture x86_64
4

3 に答える 3

1
Polygon::Polygon()
{
   numPoints = 0;
   points = new Point[numPoints];
}

タイプが0のオブジェクトにメモリを割り当てていますPoint。それは問題。

于 2013-03-11T08:55:00.603 に答える
1

コンパイル エラーの原因はMIN_VALandでありMAX_VAL、これを宣言してからコンストラクターで初期化します。したがって、それらへの参照はすべて未定義です。

使用を検討してください

class Point {
...
};

float Point::MIN_VAL = -10.0f;
float Point::MAX_VAL = 10.0f;

class Polygon {
...
};
于 2013-03-11T09:02:58.217 に答える
1

std::vector<Point>配列の代わりに実際に保持する必要があります。

class Polygon
{
private:
   int numPoints;
   std::vector<Point> points;
....
};

次に、デストラクタ、コピー コンストラクタ、またはコピー代入演算子について心配する必要はありません。デフォルトのサイズはゼロなので、デフォルトのコンストラクターは次のようになります

Polygon::Polygon() : numPoints(0) {}

そしてこれ:

Polygon::Polygon(int numPoints, float xArray[], float yArray[])
{
     for(int i = 0; i < numPoints; i++)
     {
       points.push_back(Point(xValues[i], yValues[i]));
     }
}

しかし実際にnumPointsは、ベクトルのサイズ、つまり からポイントの数を取得できるため、 data member は必要ありませんpoints.size()

于 2013-03-11T09:03:22.810 に答える