-1

verticesの配列を作りたいVector。しかし、それを宣言して初期化する方法がわかりません。私はこれを試しましたが、それは不平を言います:

class Mesh {
public:
    Vector  vertices[];
    int     verticesCount;
    Mesh();
    virtual ~Mesh();
};

Mesh::Mesh() {
    verticesCount = 4;

    vertices = new Vector[verticesCount]; // error: expected primary-expression before ']' token
    vertices[0] = new Vector(0, 0, 0);
    vertices[1] = new Vector(1, 0, 0);
    vertices[2] = new Vector(1, 1, 0);
    vertices[3] = new Vector(0, 1, 0);
}

Mesh::~Mesh() {
   delete vertices;
}

編集

あなたのヒントを適用して修正しようとすると、私はこれに到達します:

Vector*     vertices;
//...
vertices = new Vector[verticesCount];
vertices[0] = Vector(0, 0, 0);
vertices[1] = Vector(1, 0, 0);
vertices[2] = Vector(1, 1, 0);
vertices[3] = Vector(0, 1, 0);
//...
delete[] vertices;

そしてそれはうまくいきました。でも大丈夫?

4

4 に答える 4

0

訂正:

Vector*  vertices;
[..]
delete[] vertices;
于 2012-11-10T17:37:55.617 に答える
0

定義されていないサイズの配列を宣言しています。コンパイラは、フィールドに不完全な型エラーがあるというエラーを発行して、これに文句を言う場合もあります。

配列はポインターではありません。配列はクラスのメモリ フットプリントに含まれるため、サイズはコンパイル時にわかっている必要があります。

次のいずれかを実行できます。

  • std::arrayサイズがアプリオリにわかっている場合に使用する
  • a を使用std::vectorして、可変サイズの配列を取得します
  • ポインタを使用しますVector *vertices(またはVector **vertices、単一の頂点をインスタンス化しているため)
于 2012-11-10T17:38:28.547 に答える
0

C++ の配列メンバーには、コンパイル時の固定サイズが必要です。

実行時に配列のサイズを指定する場合は、ポインターを使用するか、できればstd::vector<Vector>.

于 2012-11-10T17:36:49.253 に答える
0

verticesの指定されていない配列として宣言し、配列Vector内の各エントリにメモリを割り当てようとします。

最初の C++ は空の配列をサポートしていません (私の記憶が正しければ)。また、配列のデータ型はポインターVectorではないため、式を使用できませんnew

ベクトルの動的配列を使用する場合は、std::vector代わりに次を使用してください。

std::vector<Vector> vertices;

そしてコンストラクターで:

vertices.push_back(Vector(0, 0, 0));
// etc.
于 2012-11-10T17:37:31.903 に答える