私のプログラムは次のとおりです。
class xxx{
public: explicit xxx(int v){cout<<"explicit constructor called"<<endl;}
xxx(int v,int n=0){cout<<"default constructor called"<<endl;}
};
int main(int argc, char *argv[])
{
xxx x1(20); //should call the explicit constructor
xxx x2(10,20); //should call the constructor with two variables
return 0;
}
コンパイルするとエラーが発生します:- 「オーバーロードされた âxxx(int)â の呼び出しがあいまいです」
デフォルトで引数を「0」にしたため、コンパイラーは両方のコンストラクターの署名が等しいと判断することを知っています。
コンパイラが署名を異なる方法で処理でき、プログラムが正常にコンパイルされる方法はありますか?