0

だから私は頂点の配列を持っていて、ファイルからのデータで配列を埋めようとしています。

現在、私のコードは次のようになっています。

    int VertexCount = Input.get();
    MVertex Vertices[4] =
    {
        {0.0f, 0.0f, 0.0f,},
        {1.0f, 0.0f, 1.0f,},
        {0.0f, 0.0f, 1.0f,},
        {1.0f, 0.0f, 0.0f,},
    };

今のところ、VertexCount を使用して配列のサイズを初期化する以外は問題なく動作しますが、取得したいので、頂点数によってはデータを入力するための for ループが必要です。何らかの理由で他の方法では機能しないため、同じ配列形式を維持したいのですが、このようにします。私は次のようなことを考えていました:

    int VertexCount = Input.get();
    MVertex Vertices[VertexCount] =
    {
        for (int i = 0; i < VertexCount; i++)
        {
            {Input.get(), Input.get(), Input.get(),},
        }
    };

しかし、それは機能しません。構文エラーが発生するだけです。誰か書き方を教えてください。

4

2 に答える 2

2

一度に多くのことをしようとしています。これを 2 つのステップに分割する必要があります。

  1. 配列を宣言し、配列を割り当てます。

    int VertexCount = Input.get();
    MVertex* Vertices = new MVertex[VertexCount];
    
  2. 配列の要素を初期化します。

    for (int i = 0; i < VertexCount; i++)
    {
        MVertex v;
        v.x = Input.get();
        v.y = Input.get();
        v.z = Input.get();
    
        Vertices[i] = v;
    }
    

MVertexオブジェクトを個別に作成することに注意してください。私の意見では、これによりコードの意図がより明確になります。また、より複雑な構文で複数のステップを一度に実行しようとするのではなく、一度に 1 つのことに集中できるため、コードを作成するのにも役立ちます。

また、 の 3 つのフィールドのMVertex名前xは 、y、 と仮定しzます。これらを適宜変更してください。

このコードは動的配列を割り当てるため、ステートメントでの使用が終了したら、割り当てられたメモリを解放する必要があります。

delete[] Vertices;
于 2013-07-26T18:41:34.080 に答える
-1

To create an array of variable size, use the new operator

MVertex* Vertices = new MVertex Vertices[VertexCount];

to create the array on the heap (and remember to delete[] it later), or use an STL container like std::vector.

于 2013-07-26T18:51:07.613 に答える