分享
为什么问答平台  ›  专栏  ›  技术社区  ›  vortex

为什么会出现错误:“有多个默认构造函数”? - Why I get the error: “there is more than one default constructor”?

  •  -4
  • vortex  · 技术社区  · 1 周前

    我收到消息:

    严重性代码描述项目文件行禁止显示状态 错误(活动)e0339类“d”有多个默认构造函数)

    还有:

    严重性代码描述项目文件行禁止显示状态错误C2668“d::d”:对重载函数的调用不明确)

    错误出现在标有\(2)的行中。

    如果删除标有//(1)的行,则可以生成代码。

    class C {
        int i, j;
    
    public:
        C(int x, int y) : i(x), j(y)
        {
            cout << "Konstr C" << endl;
        }
        C() : i(0), j(0)
        {
            cout << "Std-Konstr C" << endl;
        }
            ~C()
        {
            cout << "Destruktor C" << endl;
        }
    };
    class D : public C {
        int k, a, b;
        C c;
    public:
    
        D():c(){ cout << "Std-Konstr D" << endl; }// (1)
    
        D(int x = 1) :c(x, 1), a(x), b(0), k(19)
    
        {
            cout << "Konstr-1 D" << endl;
        }
        D(int x, int y, int z) :C(x, y), a(1), b(2), c(x, y), k(z)
        {
            cout << "Konstr-2 D" << endl;
        }
        ~D()
        {
            cout << "Destruktor D" << endl;
        }
    };
    class E : public D {
        int m;
        C c;
        D b;
    public:
        E(int x, int y) : c(2, 3), b(y), m(x + y)// (2)
        {
            cout << "Konstr E" << endl;
        }
        ~E()
        {
            cout << "Destruktor E" << endl;
        }
    };
    
    1 回复  |  直到 1 周前
        1
  •  1
  •   Mureinik    1 周前

    D() int 1

    x

    D():c(){ cout << "Std-Konstr D" << endl; }// (1)
    
    D(int x) :c(x, 1), a(x), b(0), k(19)
    //    ^-- x=1 was removed here
    {
        cout << "Konstr-1 D" << endl;
    }