7

行 A b(3) は、2 つの可能なコンストラクターのいずれかを呼び出す可能性があるため、あいまいさが生じます。単一引数のパラメーター化されたコンストラクター、または既定の引数を持つ 2 つの引数のパラメーター化されたコンストラクターのいずれか。どうすればこれを解決できますか?

#include<iostream>
using namespace std;
class A
{
    public:
    int a,b;
    A()
    {
        a=5;
        b=6;
    }
    A(int a1)
    {
        a=a1;
        b=54;
    }
    A(int a1,int b2=8)
    {
        a=a1;
        b=b2;
    }
    void show()
    {
        cout<<"a="<<a<<" b="<<b<<endl;
    }
};    
int main()
{
    A a(3); // I want A(int a1,int b2=8) to get executed
    A b(3); // I want A(int a1) to get executed
    a.show();
    b.show();
    return 0;
} 
4

5 に答える 5

1

コンパイラに求めているものにはあいまいさがあります。

A(int a1)
{
    a=a1;
    b=54;
}

A(int a1,int b2=8)
{
    a=a1;
    b=b2;
}

クラスが1つのパラメータのみで作成される場合も同じです。まず、クラスからの期待を英語で書き留めます。次に、それをc++コードに変換します。例:「クラスAが1つのパラメーターのみで作成されている場合は、変数をそのパラメーターと等しくし、変数bを54にします。2つのパラメーターで作成されている場合は、最初のパラメーターをaに、2番目のパラメーターをb"およびこの式のコードは次のとおりです。

A(int a1,int b2=54)
{
    a=a1;
    b=b2;
}
于 2012-05-29T17:07:05.567 に答える
1

関数を削除し、呼び出すA(int a1)代わりにA b(3)A b(3, 54)

于 2012-05-29T17:14:40.097 に答える