2017-07-15 10 views
-1

これはコンストラクタに関する質問です。 2つのC++クラスAとBがAのインスタンスが作成されたときに質問が、ある別のクラスのメンバーであるC++クラスのデフォルトでないコンストラクタ?

class A 
{ 
    B b; 
}; 

class B 
{ 
    A *a; 
}; 

として概念的に関連しているが、私はBのコンストラクタを必要と思えるように、その部材BがAにポインタを構築することにしたいですAのインスタンスへのポインタを引数として持ち、Aのインスタンスが構築されたときにBのそのコンストラクタが呼び出されるようにしてください。

+0

上記の文字を定義しますか?何が問題なの? – StoryTeller

+0

まずは前方宣言が必要です。 – skypjack

答えて

1

ここではstructを公開の既定値として使用しています。

struct A; 

struct B { 
    B(A *a_ptr = 0) : a(a_ptr) {} 
    A *a; 
}; 

struct A { 
    A() : b(this) {} 
    B b; 
}; 

あなたはオブジェクトへthisポイントが完全に構築されていないおせっかいコンパイラからAのコンストラクタで警告を受けるかもしれません。

+0

それに 'struct A a; std :: cout <<(aba ==&a)<< std :: endl; 'はこの使い方をより明確にするために' 1'を出力し、それが動作することを証明します:[オンラインで試してください](https:// tio。実行/ ## RYxNCsMgFIT3nmKgULSQkHV @ CuYixai0QmKC0W5Czm6NLelbzbz5ZuSyFE8pY7wYK8egNFozr95pMd0JSSJID96cssdGkK6nHDfxWLxDh4qhhqDZMmx7Jo68Ifu/yn9VTg98oP5l1pPuMXxhYz0mYSx9z0axXDn7aS9bVddyDh5tCyrKoRToOlwFOx451VaNmXXaB2dRpe0YPw "C++(GCC) - オンラインそれを試してみてください") –

関連する問題