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。但是,如果我们应该考虑当前的标准,这将是一个悬而未决的参考,这将是悬而未决的参考。