首页 > 解决方案 > 委托构造函数不能有其他内存初始化器 - 错误

问题描述

我正在尝试在下面的代码中做类似的事情。我收到了来自 VS 的问题标题中的错误。谁能告诉我怎么了?

class A
{
public:
    int x;
    A(int x = 15)
    {
        this->x = x;
    }
};

class B : public A
{
public:
    int a,b,c;


    B(int a, int b, int c)
    {
        this->a = a;
        this->b = b;
        this->c = c;
    }

    B(int a, int b, int c, int x) : A(x), /*here is error*/B(a,b,c)
    {

    }
};

标签: c++constructordelegates

解决方案


在您的 4 参数构造函数中B,您不能构造基类A,然后委托给另一个构造函数。其他构造函数也会构造A,可能会造成各种破坏。

您要么需要复制B's 成员的初始化,将它们放在辅助函数中,要么从 3 参数函数委托给 4 参数函数(为传递给构造函数的第 4 个参数提供正确的值为A)。

B(int a, int b, int c): B(a, b, c, 15)
{
}

推荐阅读