0

スタンフォード大学の CS 106B クラスをオンラインでフォローしようとしていますが、構造体のベクトルに要素を追加しようとすると壁にぶつかります。何が起こっているのか分かりますか?

   struct point {                  // Definition for our "point" structure
    int x;
    int y;
    };

Vector<point> pointVector;

point derp;
derp.x = 1;
derp.y = 2;
pointVector.add(derp);

残念ながら、これを試すと、XCode で 2 つのエラーが発生します。1 つ目は、「テンプレート引数はローカル タイプ 'point' を使用しています。2 つ目は、「非クラス タイプ 'int' である 'pointVector' 内のメンバー 'add' の要求です。これは私のコンパイラに何らかの問題がありますか? ドキュメントから判断すると、これでうまくいくはずです。

4

2 に答える 2

4

2011 年以前は、この言語には奇妙で無意味な制限がありました。テンプレート引数にローカル型を含めることはできませんでした。これは、2011 規格で修正されています。

最初のエラーを修正するには、次のいずれかを行います。

  • の定義をpoint関数の外に移動し、クラスまたは名前空間に移動します。また
  • コンパイラで C++11 サポートを有効にするか、それができない場合は最新のコンパイラを入手してください。

2 番目のエラーは、最初のエラーの連鎖反応です。コンパイラは の型を判別できなかったpointVectorため、役に立たないふりをして続行することにintしました。最初のエラーを修正すると、エラーは解消されます。

于 2013-02-20T15:25:53.820 に答える
-1

やってみる

typedef struct point {                  // Definition for our "point" structure
    int x;
    int y;
}point;

std::vector<point> pointVector;

point derp;
derp.x = 1;
derp.y = 2;
pointVector.add(derp);

また

struct point {                  // Definition for our "point" structure
    int x;
    int y;
    };

std::vector<struct point> pointVector;

point derp;
derp.x = 1;
derp.y = 2;
pointVector.add(derp);

これでうまくいくはずです。

于 2013-02-20T15:21:22.933 に答える