C ++ 11初始化std :: string成员

时间:2015-08-09 14:51:44

标签: c++11

当我初始化调用其 C string 构造函数的类的std :: string成员时,我收到以下错误:

error: expected identifier before string constant
error: expected ',' or '...' before string constant

虽然,当我使用复制初始化或列表初始化时,程序会成功编译。

class Element
{
private:
    std::string sName_("RandomName"); // Compile error
    std::string sName_ = "RandomName"; // OK
    std::string sName_{"RandomName"}; // OK
}

什么似乎是问题?

更新

现在我意识到这是一个愚蠢的问题,因为正如@ p512所说,编译器会将其视为错误的方法声明。但我认为这个问题应该留给那些会做同样思考错误的人。

1 个答案:

答案 0 :(得分:2)

std::string sName_("RandomName");

这是一个错误的函数声明 - 至少这是编译器所做的。相反,你可以使用这样的东西:

std::string sName_ = std::string("RandomName");

您还可以在班级的构造函数中使用初始化列表:

class A {
public:
    A() : sName_("RandomName") {}
    std::string sName_;
};

您可以在此处找到更多相关信息:http://en.cppreference.com/w/cpp/language/initializer_list