私はそのようなコードを書きたいが、それは動作しません:前方宣言
struct ast;
struct parser;
struct parser
{
struct node
{
node *parent;
};
ast build_ast() //here we want to use object of ast tyoe
{
node *ret = new node;
return ast(ret);
}
};
struct ast
{
parser::node *root; //here we try to access member struct of y
ast(parser::node *rt):root(rt){}
};
問題は、私は、パーサーに不完全な型のオブジェクトを作成しようということです。構造体の実装を入れ替えると、不完全な型のメンバstructにアクセスしようとするという問題があります。明らかに、私はノードを独立した構造にすることでこの問題を解決することができますが、それは私のプログラムに他のノードタイプを持たせたいので、悪いと思われます。 質問は、どういうわけか、ノード構造体の前方宣言をパーサー構造体の外に作ることができますか?例:
struct ast;
struct parser;
struct parser::node; //making a forward declaration of member struct
これができない場合は、どのように競合を解決するのですか?あなたはast
までbuild_ast
の定義を延期する必要が
あなたが前方node' '宣言したことはありません。 –
は構造体のast build_ast()関数を宣言し、後で構造体astの後に定義するだけです。 – arayq2
クラスの宣言と定義をそれぞれのヘッダーに入れ、 '.cpp'ファイルにメンバ関数を実装します。ここで適切なヘッダもインクルードする必要があります。 – Nawaz