C++ C++;具有不同参数的多个构造函数
我有一个ABC类,它的构造函数有3个参数,例如x1、x2和l。下面显示了一个示例代码。我正在尝试在同一个类ABC中创建另一个构造函数,它应该接受不同的参数,但我无法这样做。这可能是一个非常笼统的问题,但我无法得到令人满意的答案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
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的答案。好吧,这意味着