2017-01-20 4 views
-2

を入力:たとえば私はこのような同じ要素型を指す要素、何かを定義するC++

#define Foo { Foo*, ..., ... } 

、これは私が簡単なを作成するのに役立ちます任意のAUXILIARクラスを作成せずに木が:その宣言の中で自分自身への参照を行う場合Fooがまだ宣言されていないので、

#define TreeNode std::deque(std::pair(char, TreeNode*)) 

TreeNode mRootNode; 

しかし、これは、実行することはできません。

私の質問は...なぜクラスで実装するときに同じ機能が許可されるのですか?私のFooを定義するために、オブジェクト指向ではなく、もっと簡単な方法がありますか?

+5

これはしたくないですが、または他のほとんどすべて。 C++でプリプロセッサマクロを使用します。 –

+5

ステップ1、マクロは使用しないでください。 – RyanP

+0

#defineは型ではなくマクロを作成します。表示されているようにマクロを展開しようとすると、無限の自己再帰が得られます。 – zstewart

答えて

2

同じ要素を指す要素を定義し、同じタイプの別のオブジェクトを参照することができるタイプを定義するC++

簡単な方法を入力すると、このようなデータ構造を定義することである。

struct Foo { 
    Foo* link; 
}; 

マクロは不要です。

Fooは、メンバーポインタが宣言された時点で宣言されているため、これは許可されています。言語の規則により、再帰的なクラスは許可されますが、再帰的なプリプロセッサマクロは許可されません。


P.S. C++のクラスはオブジェクト指向の機能をサポートしていますが、Cで構造体を使用するのと同じように、それらの機能を使用せずにクラスを使用することができます。

関連する問題