2017-07-29 16 views
0

コンストラクタに問題があります。 私は2つのクラス(MyClass1、MyClass2)を持っています。エラーC2512:適切なデフォルトコンストラクタがありません:引数を持つオブジェクトの宣言!コンストラクタ内部

MyClass1.h

class MyClass1 { 
public: 
    MyClass1(); 
    ... 
private: 
    MyClass2 object; 
    ... 
} 

MyClass1.cpp

#include "MyClass1.h" 

MyClass1::MyClass1() {  //This constructor causes the error!!! 
    object = MyClass2(1000); 
    ... 
} 

... 

MyClass2.h

class MyClass2 { 
public: 
    MyClass2(int); 
    ... 
private: 
    int id; 
    ... 
} 

MyClass2.cpp

#include "MyClass2.h" 

MyClass2::MyClass2(int id) { 
    this->id = id; 
    ... 
} 
... 

「MyClass1」のインスタンスを作成するとき、私は、このエラーメッセージが表示されます。

error C2512: 'MyClass2': no appropriate default constructor available 
+0

ではなく、コンストラクタ本体でそれを行うのメンバ変数を初期化する初期化子リストを使用してください。 – user0042

+0

'MyClass1.cpp'の' #include "MyClass2.h"はどこにありますか?あなたが 'MyClass2'を参照しているので、それがそこにあるはずです。 – InternetAussie

答えて

2

あなたはそのobjectがデフォルトで構築する必要が前に、コンストラクタの体内にobjectを割り当てるが、MyClass2 doesnのにしようとしていますデフォルトコンストラクタを持っていません。

objectの初期化に使用するコンストラクタを指定するには、member initializer listを使用する必要があります。

コンストラクタの関数本体を構成する複合文が実行を開始する前に、すべての直接基底、仮想基底および非静的データメンバーの初期化が完了します。メンバ初期化子リストは、これらのオブジェクトのデフォルト以外の初期化を指定できる場所です。

MyClass1::MyClass1() : object(1000) { 
} 
0

エラーは、コンストラクタの本文を入力するときに、すべてのメンバーが構築され、初期化されている必要があります。あなたはMyClass2コンパイラに不平を言うことができないので、メンバオブジェクトを初期化する

構文は次のとおりです。

MyClass1::MyClass1() : object(1000) {} 
関連する問題