2016-05-10 11 views
2

C++でポインタまたは参照を返すと、前方宣言を使用して循環依存を簡単に中断することができます。しかし、価値あるものに戻らなければならない場合はどうしますか? 値によって返されるC++の循環依存関係?

は、循環依存関係を壊すためにどのような方法があります

struct Foo { 
    Bar bar() {return Bar{*this}; } 
}; 

struct Bar { 
    Foo foo; 
} 

以下の簡単な例を考えてみましょうか?宣言を進めようとすると、不完全な戻り値型に関する不平が表示されます。

+0

関数をインラインで定義しないでください。 'struct Bar; struct Foo {Bar bar();};構造体のバー{Foo foo;}; Bar Foo :: Bar(){return Bar {* this};} – immibis

答えて

7

メンバー関数を宣言する2つの型を定義します。次に、クラスの外、さらには2番目のクラス定義の後でも、メンバー関数を定義します。

struct Bar; 
struct Foo { 
    Bar bar(); 
}; 

struct Bar { 
    Foo foo; 
}; 

Bar Foo::bar() {return Bar{*this}; } 
+0

さて、私は愚かな気分になります。私はエラーメッセージで混乱して、問題がインライン定義ではなく戻り値の型であると考えました。 – Antimony

+0

実際には、コピーctorを必要とするreturn _statement_です。 – MSalters

関連する問題