当我初始化调用其 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所说,编译器会将其视为错误的方法声明。但我认为这个问题应该留给其他会犯同样思维错误的人。
最佳答案
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
关于C++11 初始化 std::string 成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31905477/