Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;具有不同参数的多个构造函数_C++_Constructor_Arguments - Fatal编程技术网

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

C++ C++;具有不同参数的多个构造函数,c++,constructor,arguments,C++,Constructor,Arguments,我有一个ABC类,它的构造函数有3个参数,例如x1、x2和l。下面显示了一个示例代码。我正在尝试在同一个类ABC中创建另一个构造函数,它应该接受不同的参数,但我无法这样做。这可能是一个非常笼统的问题,但我无法得到令人满意的答案 class ABC { protected: X1& _x1; X2& _x2; Logger& _logger; ABC(X1& x1, X2& x2, Log

我有一个ABC类,它的构造函数有3个参数,例如x1、x2和l。下面显示了一个示例代码。我正在尝试在同一个类ABC中创建另一个构造函数,它应该接受不同的参数,但我无法这样做。这可能是一个非常笼统的问题,但我无法得到令人满意的答案

     class ABC {
      protected:
      X1& _x1;
      X2& _x2;
      Logger& _logger;
      ABC(X1& x1, X2& x2, Logger& l):_x1(x1), _x2(x2),_logger(l) {}
      ABC(X1& x1, Logger& l):_x1(x1),_logger(l) {} //getting error uninitialized reference member ‘ABC::_x2’
      ~ABC(){this->clear();}
      void clear(){}
      };

错误取消初始化引用成员“ABC::x2”

编译器告诉您真相-您需要初始化类中的第二个引用,即
\ux2


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

编译器告诉您的是事实-您需要初始化类中的第二个引用,即
\ux2


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

编译器告诉您的是事实-您需要初始化类中的第二个引用,即
\ux2


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

编译器告诉您的是事实-您需要初始化类中的第二个引用,即
\ux2


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

好的,compiler告诉您问题是什么(这与有多个构造函数有关):您的类有一个引用成员,该成员未在构造函数中初始化:
\ux2
。所有引用成员都需要在构造函数中初始化。

好吧,编译器会告诉您问题是什么(这与拥有多个构造函数有关):您的类有一个引用成员未在构造函数中初始化:
\u x2
。所有引用成员都需要在构造函数中初始化。

好吧,编译器会告诉您问题是什么(这与拥有多个构造函数有关):您的类有一个引用成员未在构造函数中初始化:
\u x2
。所有引用成员都需要在构造函数中初始化。

好吧,编译器会告诉您问题是什么(这与拥有多个构造函数有关):您的类有一个引用成员未在构造函数中初始化:
\u x2
。所有引用成员都需要在构造函数中初始化。

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) {}
    ...
};

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) {}
    ...
};

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) {}
    ...
};

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) {}
    ...
};

必须对引用进行初始化。对于类成员,这意味着在构造函数的成员初始值设定项列表中进行初始化


如果该成员可能未初始化,则将其设置为指针并确保其已默认初始化(即:m2_u()//null,其中m2_u为m2*m2_;),或使用至少确保默认初始化的智能指针将其包装起来。对于类成员,这意味着在构造函数的成员初始值设定项列表中进行初始化


如果该成员可能未初始化,则将其设置为指针并确保其已默认初始化(即:m2_u()//null,其中m2_u为m2*m2_;),或使用至少确保默认初始化的智能指针将其包装起来。对于类成员,这意味着在构造函数的成员初始值设定项列表中进行初始化


如果该成员可能未初始化,则将其设置为指针并确保其已默认初始化(即:m2_u()//null,其中m2_u为m2*m2_;),或使用至少确保默认初始化的智能指针将其包装起来。对于类成员,这意味着在构造函数的成员初始值设定项列表中进行初始化


如果该成员可能仍处于未初始化状态,则将其设为指针并确保其已默认初始化(即:m2_u()//null,其中m2_u为m2*m2_;),或者使用至少确保默认初始化的智能指针将其包装起来

好,这是否意味着无法为上述示例创建第二个构造函数?如果您坚持将
\ux2
作为参考,则需要在第二个构造函数中初始化它。否则不要将其声明为引用。看看dasblinkenlight的答案。好吧,这是否意味着无法为上述示例创建第二个构造函数?如果您坚持将
\u x2
作为参考,则需要在第二个构造函数中初始化它。否则不要将其声明为引用。看看dasblinkenlight的答案。好吧,这意味着