さて、 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 版は購入しないでください。これらの版の著者はひどいです)。