2012-01-24 8 views
-7
public: 
A();   
A(int B){*C = B - 1;}; 
private: 
int *C; 

これは正しく2つのデフォルトのコンストラクタを呼び出す方法ですが、Visual Studioではエラーが発生していると思います。このコードで何が問題になっていますか?インラインのデフォルトのコンストラクタを定義しています

+0

どのようなエラーが表示されます。関数の '}'の後に ';'を付けてはいけません。 –

+0

あなたのエラーは何ですか?あなたが私たちがあなたを助けてくれることを期待するなら、より具体的になるべきです。 定義を持たないため、引数を取らないコンストラクタの横に{}を追加します。 – fdh

+3

少なくとも、クラスA {'と'};がありません。完全な最小限のプログラムとそれが生成するエラーメッセージを投稿してください。 http://sscce.org/。 –

答えて

2

実際には、1つのコンストラクタがデフォルトのコンストラクタです。しかし、他の "コンストラクタ"はデストラクタとしてより多く動作するように拘束されていますが、一般的にアクセス不能なメモリにアクセスし、通常はプログラムを "クラッシュ"させます。あなたは "メンバ初期化子リスト"を参照する必要があります。

5

これがコンパイルされます。あなたのプログラムとどのように違うのですか?

class A { 
public: 
    A() {} // Define (not merely declare) default constructor 
    A(int B) { C = B - 1; } // Note: don't use uninitialized pointer 
private: 
    int C; // Note: not a pointer 
}; 
関連する問題