2016-04-16 22 views
0

私は簡単な質問があります。デフォルトと明示的なコンストラクタ

できますか?

class test { 
    int x; 

public: 
    test(); 
    test(int x); 
}; 

そしてメインで私が持っている:私はクラスのテストを持っており、最初、私はデフォルトのコンストラクタを持つオブジェクトtを宣言したが、その後、私は明示的に明示的なコンストラクタを呼び出して値を変更したい

test t; 
t(2); 

Suposeを。 私はこれを試したので、関数(test)(int)のマッチコールがなくなり、意味がありません。

+1

あなたは割り当てをしたいの

test t; t = 2; // or t = test(2); 

を使用して書くことを意味しました。 't = test(2);' – GManNickG

+0

@GManNickG Yessss、ありがとうございました!できます。 –

答えて

0

あなたのクラス宣言は罰金ですが、

t(2); 

は、コンストラクタ呼び出しではありません、それが提供されていないtestvoid operator()(int)過負荷を呼び出そうと。


おそらく、単に

test t(2); 

またはコンパイラ生成された代入演算子の代わりに

test t; 
t(2); 
+0

しかし、もし私がそれを行うなら、私は思い浮かべます:テストtは以前にテストtで宣言されています。エラー。だから私はデフォルトのものを呼び出した後に明示的なコンストラクタを呼び出す方法が存在する? –

+1

@DariusIonut私はあなたがその行を置き換える必要はありませんが、変数宣言で構文を使用し、元のを省略します。割り当てのオーバーロードを代入演算子に指定したい場合、または私の答えにあるように呼び出し演算子 'operator()'のオーバーロードを提供したい場合。 –

+0

@DariusIonutいいえ、できません。コンストラクタは常にクラスインスタンスに対して*** ***と呼ばれます。 –

関連する問題