2016-04-06 4 views
0

以下は作成された例ですが、私が取り組んでいるコードサンプルを代表しています。このクラスのコンストラクタを呼び出す方法

ここでは、クラスtestのコンストラクタをどのように呼び出すのですか?

class Test 
{ 
public: 
    Test(vector<double>* pt) 
    { 
    ptv = pt; 
    } 
    vector<double>* ptv; 

}; 



class container 
{ 

public: 
    container(double a, double b) 
    { 
    v.push_back(a); 
    v.push_back(b); 
    // How to call the construtor of ct_ptv here? 
    } 
    vector<double> v; 
    Test  ct_ptv; 
}; 

言い換えれば、2つのクラスがあります。それらのうちの1つは、インスタンス化 にサイズ2のベクトルが含まれているコンテナと呼ばれます。同じ クラスには、vへのポインタ を含むというクラスがあります。

ここでct_ptvのコンストラクタを呼び出すにはどうすればよいですか?ここct_ptvのコンストラクタを呼び出す方法

+2

_' //? '_あなたはコンストラクタ本体でそれを呼び出すことはできませんが、メンバー初期化子リストで初期化する必要はありません。 –

答えて

1
class container 
{ 
public: 
    container(double a, double b) : 
     v({ a, b }), 
     ct_ptv(&v) 
    { 
    } 
    vector<double> v; 
    Test ct_ptv; 
}; 
+0

初期化リストからメンバを参照するときに警告が表示されることがあります。私は基本クラスにいくつかのポインタを渡したときにこれを持っていました。警告が表示されたら、無視してください。 – BitTickler

+0

'v({a、b}) '構文はC++ 11以降でのみ利用可能であることに注意してください。 C++ 11以前では、コンストラクタ本体に 'v.push_back()'を呼び出す必要があります。ただし、コンストラクタの初期化リストで 'ct_ptv'を初期化することはできます。 –

+0

@BitTicklerあなたが参照している警告は、おそらくメンバ変数が初期化される前にそれを使用することです。この例では 'v'と' ct_ptv'が(クラス定義ではなく、イニシャライザのリストではなく)切り替えられた場合、その警告が現れます。データメンバは、常にクラス定義に現れる順序で初期化されます。 – Kevin

0
class container 
{ 
public: 
    container(double a, double b) 
     : ct_ptv(&v) 
    { 
    v.push_back(a); 
    v.push_back(b); 
    } 
    vector<double> v; 
    Test  ct_ptv; 
}; 
関連する問題