#include "passenger.h"
class node
{
public:
passenger dataItem;
node nextNode;
};
あるクラスと同じ型の変数を作成しようとすると、不完全な型が許可されていませんというエラーが発生するのはなぜですか?
#include "passenger.h"
class node
{
public:
passenger dataItem;
node nextNode;
};
あるクラスと同じ型の変数を作成しようとすると、不完全な型が許可されていませんというエラーが発生するのはなぜですか?
プロセス全体でコンパイラに従うようにしてください。
とはsizeof(node)
。
修正するには、ノードへのポインターの使用を検討してください。
class node
{
public:
passenger dataItem;
node * nextNode;
};
あなたのコードを見た後、あなたは Java/C# のバックグラウンドを持っているように見えます。つまり、実際には、これらの言語からの参照をエミュレートするためにポインターが実際に必要なのです。
これらの言語ではオブジェクトが参照型であるのに対し、C/C++ では値型であることに注意してください。違いはnode nextNode
、C/C++ の場合はオブジェクト自体であるのに対し、Java/C# では次のノードを指すことです。
編集nextNode
:メンバー変数を定義するときに、まだ定義の途中でありnode
、不完全であるという事実が原因で、エラーが発生します。node*
ポインターは前方宣言のみを必要とし、不完全な型でも問題ないため、機能します。
同様に、Java/C# でも動作します。これらの言語のすべての変数 (C#struct
と Java プリミティブを除く) は、何らかの構成を備えた単なるポインターであるためです。
編集: C++ のポインターについてよく読んでくださいnew
。/delete
すぐに 1 つまたは 2 つのクラッシュが発生すると思います.. :(. また、ポインターを理解するための障壁とは何か、それらを克服するために何ができるかを見てください。 .
要約すると、ポインターを割り当てるには、次のようにします。
node a;
node b;
a.nextNode = &b; //& operator returns the address of its operand, here b