header.h
class Foo{
public:
void fooFunction(std::map <std::string, Bar> &);
}
class Bar{
public:
void barFunction(std::map <std::string, Foo> &, Foo &);
}
これをコンパイルしようとすると、fooFunctionのスコープでBarが宣言されていないというエラーが表示され、宣言の順序を切り替えると、FooがbarFunctionのスコープにないというエラーが表示されます。
どうすればそれらをお互いの範囲内に入れることができますか?複数のヘッダーファイルが必要な場合、makefileと#includeでどのように設定する必要がありますか?
それを必要とするヘッダー内の他のクラスを単純に前方宣言することができます。
class Bar;
class Foo
{
public:
void fooFunction(std::map <std::string, Bar>&);
};
class Bar
{
public:
void barFunction(std::map<std::string, Foo>&, Foo &);
};
これは、定義されるまでどこでも値でFoo
使用しないという条件で機能Bar
しますBar
。つまり、メンバーとして保存し、パラメーターとして渡し、そのタイプの値を返します。この場合、Foo
パラメータは参照によって渡されるため、問題ありません。
あなたにもかかわらず、ことを注意std::map
店舗が入力しBar
た時間がする値によって、あなたがそれを使用するまで、それはテンプレートだと解決されないので、これはまだ大丈夫です、Bar
定義されます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加