当我初始化调用其 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所说,编译器会将其视为错误的方法声明。但我认为这个问题应该留给那些会做同样思考错误的人。
答案 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