2016-05-10 14 views
2

当通过C++中的指针或引用返回时,使用前向声明很容易破坏循环依赖关系。但是在你需要按价值回报的情况下,你会做什么?通过值返回的C++循环依赖项?

考虑下面

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

struct Bar { 
    Foo foo; 
} 

简化的例子有什么办法打破循环依赖?尝试转发声明栏只会导致对不完整返回类型的投诉。

+0

不要定义函数内联。 'struct bar; struct Foo {Bar bar();}; struct Bar {Foo foo;}; Bar Foo :: Bar(){return Bar {* this};}' – immibis

回答

7

定义这两种类型,声明它们的成员函数。然后在类之外定义成员函数,甚至在第二个类定义之后。

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

struct Bar { 
    Foo foo; 
}; 

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

现在我觉得很傻。我对错误信息感到困惑,并认为问题出在返回类型上,而不是内联定义。 – Antimony

+0

这真的是返回_statement_需要复制ctor。 – MSalters