C ++具有不同参数的多个构造函数

时间:2015-05-25 19:43:58

标签: c++ constructor arguments

我有一个ABC类,其构造函数带有3个参数,例如x1,x2和l。一个示例代码如下所示。我试图在同一个类ABC中创建另一个构造函数,它应该采用不同的参数但是,我无法做到。这可能是一个非常普遍的问题,但我无法得到满意的答案。

Map<String, ArrayList<String>> map

错误未初始化的参考成员'ABC :: _ x2'

4 个答案:

答案 0 :(得分:1)

编译器告诉你实话 - 你需要初始化你班级的第二个参考,即_x2

您不能使用未初始化的引用,因此要么不使用它们,要么需要在声明的每个构造函数中初始化它们。

答案 1 :(得分:1)

那么,编译器会告诉你问题是什么(并且它与多个构造函数有关):你的类有一个未在构造函数中初始化的引用成员:_x2。所有引用成员都需要在构造函数中初始化。

答案 2 :(得分:0)

C ++要求您初始化所有引用成员。如果存在对对象的引用是可选的情况,则最好用指针替换引用变量:

X2* _x2;

如果你必须有一个默认的引用,为它创建一个私有静态变量,并使用该变量初始化你的引用变量:

class ABC {
private:
    static X2 _x2_default; // Declare it in a CPP file
protected:
    ...
    ABC(X1& x1, Logger& l):_x1(x1),_logger(l), _x2(_x2_default) {}
    ...
};

答案 3 :(得分:0)

必须初始化参考。对于类成员,这意味着在构造函数的成员初始化列表中初始化。

如果成员可能保持未初始化状态,请将其作为指针并确保它是默认初始化的(即:m2_()// null,其中m2_是M2 * m2_;),或者使用智能指针将其包装在至少确保默认初始化