-1

私は、Vehicle というアイテムを受け取り、それを Node という配列に格納する必要があるというコードを考えています。これは、プログラムのこの部分に関連するコードです。

void Table::process(Vehicle v, int cont) {
    char a='A'+cont;
    putVehicle(a,v);
    Node.a_v[cont]=v;
    if(cont==0) a_surt=v.rowVehicle();
}

これは、Table.h のプライベート部分に配列を配置する方法です。

struct Node{
    Vehicle a_v;
};

私が得るエラーは次のとおりです。

error: expected primary-expression before '.' token

必要なインクルードはありますが、これを入力するたびに、Node.a_vそのエラーが発生します。何かアドバイス?

4

4 に答える 4

4

構造体を使用する場合は、使用する前に a を宣言する必要がありますNode。また、構造体には配列が含まれている必要があります (または、柔軟性を高めるためにベクトルを調べてください)。

struct Node {
    Vehicle[10] a_v; // 10 is max number of Vehicles in array
};

Node myNode;
myNode.a_v[cont] = v;

これを保持してさらに多くのものを入れたい場合Nodeは、正しいスコープで宣言する必要があることに注意してください。たとえば、関数の外部に存在するaに aをprocess追加するには、次のようにします。VehicleNodeprocess

void Table::process(Node n, Vehicle v, int cont) {
    char a = 'A'+cont;
    putVehicle(a,v);
    if (cont < 10) {
        n.a_v[cont] = v;
    }
    if (cont == 0) a_surt = v.rowVehicle();
}

配列を使おうとしているだけのようです。その場合、次のようなものを探しています。

// This would go somewhere in your program. Again, 10 is just an example.
Vehicle vehicleArray[10];

// Send this array to this function
void Table::process(Vehicle[] vArray, Vehicle v, int cont) {
    char a = 'A'+cont;
    putVehicle(a,v);
    if (cont < 10) { // In a real program, don't hard-code array limits.
        vArray[cont] = v;
    }
    if (cont == 0) a_surt = v.rowVehicle();
}
于 2013-04-26T13:32:36.650 に答える
3

オブジェクトを使用して変数Nodeにアクセスする必要があります。a_vこの行

Node.a_v[cont]=v;

間違っています。あなたはそのようなことをするべきです:

Node n;
n.a_v[cont]=v;
于 2013-04-26T13:32:32.277 に答える
2

これを入力するたびに: Node.a_v それは私にそのエラーを与えます。

Nodeタイプです。型はオブジェクトの構造を定義しますが、独自のフィールドはありません (static一度にすべてのインスタンスに属するフィールドを除いて、いずれにせよ異なる方法でアクセスされます)。

.or演算子を使用するには、次のように のインスタンス->必要です。Node

Node x;
x.a_v = ...

Nodeただし、インスタンスがどこから来るべきかは明確ではありません。それらにアクセスするには、それらをパラメーターとして渡すか、静的/グローバルに使用できるようにする必要があります (推奨されません)。

于 2013-04-26T13:33:44.663 に答える
0

さて、 Node は配列の名前ではありません。これは、配列を含むことになっているユーザー定義型の名前です。ただし、ノードには配列が含まれていません。a_v という名前の車両が 1 つ含まれています。a_v は車両の配列を表すと想定しています。したがって、配列を割り当てる必要があります。このようなもの:

struct Node {
   Vehicle a_v[AMOUNT];
};

コンパイル時に配列の大きさがわからない場合は、次のように動的に割り当てる必要があります。

struct Node {
   Vehicle* a_v;
   Node() {
      a_v = new Vehicle[AMOUNT];
   }
};

動的に割り当てられている場合は、割り当ても解除する必要があります。

struct Node {
   Vehicle* a_v;
   Node() {
      a_v = new Vehicle[AMOUNT];
   }
   ~Node() {
      delete[] a_v;
   }
};

また、動的に割り当てられる場合は、コピーの規定を追加するか、コピーを無効にする必要があります。

struct Node {
   Vehicle* a_v;
   Node() {
      a_v = new Vehicle[AMOUNT];
   }
   ~Node() {
      delete[] a_v;
   }

   // Disable copies (with C++11 support):
   Node(const Node&) = delete;
   Node& operator=(const Node&) = delete;

   // Disable copies (without C++11 support) by making them private and not defining them.
   private:
   Node(const Node&);
   Node& operator=(const Node&);
};

次に、車両の 1 つにアクセスするには、次のようにする必要があります。

Node n;  // Declare a node, which contains an array of Vehicles
n.a_v[cont] = v;  // Copy a Vehicle into the array of Vehicles

ただし、この関数で Node インスタンスを宣言すると、それはローカルになり、関数が終了するとすぐにスコープ外になることに注意してください。関数呼び出し後も保持する場合は、Node インスタンスを Table のメンバーとして宣言する必要があります。

class Table
{
   private:
      Node n;
};

最後に、他の人が示唆しているように、C++ の本を読んで C++ を学ぶことを強くお勧めします。私の個人的なおすすめはこの本です(第 5 版、第 6 版または第 7 版は購入しないでください。これらの版の著者はひどいです)。

于 2013-04-26T13:58:25.500 に答える