0
#include "passenger.h"
class node
{
public:
    passenger dataItem;
    node nextNode;
};

あるクラスと同じ型の変数を作成しようとすると、不完全な型が許可されていませんというエラーが発生するのはなぜですか?

4

1 に答える 1

5

プロセス全体でコンパイラに従うようにしてください。

とは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
于 2013-02-25T01:49:11.607 に答える