間接化せずにヘッダーファイルでこれらのクラスを宣言する方法はありますか?
// Forwards declaration of B
class B;
class A
{
public:
// Default parameter referring to B. May return its parameter
const B& func(const B& b = B());
};
class B
{
public:
// B ctors
B() {}
B(const B&) {}
// B has A as a member
A a;
};
Visual C ++ 2008は、次のように教えてくれます。
error C2514: 'B' : class has no constructors
そして、Bの前方宣言(「クラスB;」)を指し、明らかに以下のBのコンストラクターを見ることができません。BにはメンバーとしてAが含まれているため、AはBをフォローできません。
間接参照を使用する必要がある場合、最善の方法は何ですか?おそらくC++0xではBのAはunique_ptrメンバーである可能性がありますか?それとも、純粋にこの問題を回避するためのブーストクラスがありますか?