C++ 使用常量字符串时创建默认构造函数
我有一个类似这样的类:C++ 使用常量字符串时创建默认构造函数,c++,default-constructor,C++,Default Constructor,我有一个类似这样的类: Person(int pID, int zipCode, float ySalary, const string& fName, const string& mName, const string& lName) 当我尝试创建默认构造函数时,如下所示: Person::Person(void){ zipCode = NULL; pID = NULL; ySalary = NULL;
Person(int pID,
int zipCode,
float ySalary,
const string& fName,
const string& mName,
const string& lName)
当我尝试创建默认构造函数时,如下所示:
Person::Person(void){
zipCode = NULL;
pID = NULL;
ySalary = NULL;
fName = "";
mName = "";
lName = "";
}
我得到一个错误,表示没有与const std::string=const char[1]匹配的运算符“=” 您需要使用成员初始值设定项列表来初始化
const
引用成员变量:
Person::Person(void) :
zipCode(NULL) ,
pID(NULL) ,
ySalary(NULL) ,
fName("") ,
mName("") ,
lName("") {
}
我建议始终使用成员初始值设定项列表语法,而不是构造函数体中的赋值。参见此处示例:您需要使用成员初始值设定项列表来初始化
const
引用成员变量:
Person::Person(void) :
zipCode(NULL) ,
pID(NULL) ,
ySalary(NULL) ,
fName("") ,
mName("") ,
lName("") {
}
我建议始终使用成员初始值设定项列表语法,而不是构造函数体中的赋值。例如,请参见此处:在前面的答案旁边,您可以使用类内初始化(从c++11开始)
示例:常量字符串&fname=“” 除了上一个答案之外,还可以使用类内初始化(从c++11开始)
示例:常量字符串&fname=“” 我想你希望以后能修改这些名字?您不应该使用常量引用,只使用普通变量。@MorphingDragon他们没有提到成员变量是
const
,他们只是通过const
引用将字符串传递给构造函数,这可能是个好主意。“我有一个类似这样的类”错误消息是左操作数是const。我想您以后可以修改名称了吧?您不应该使用常量引用,只使用普通变量。@MorphingDragon他们没有提到成员变量是const
,他们只是通过const
引用将字符串传递给构造函数,这可能是个好主意。“我有一个类似这样的类”错误消息说左操作数是const。您还应该注意,不需要默认构造函数,如果他希望编译器生成一个构造函数,那么他应该有Person()=default
。@0x499602D2 True,但这显然是c++11。但是,如果我们应该考虑引用当前的标准,你也应该注意到,不需要默认构造函数,如果他想要编译器生成的代码,他应该有<代码>(=)默认值>代码。@ 0x499 602d2是真的,但是这将是C++ 11。但是,如果我们应该考虑当前的标准,这将是一个悬而未决的参考,这将是悬而未决的参考。