我正在尝试初始化一个类成员,其中该成员是另一个类的实例。 Visual Studio 似乎认为我正在声明一个函数成员:
class OtherClass {
OtherClass();
OtherClass(string Foo);
}
class MainClass {
// This Compiles. Default constructor used
OtherClass Instance1;
// Does not compile. Visual studio thinks I'm declaring a function member that returns an OtherClass.
OtherClass Instance2("Foobar");
}
我意识到我可以用这样的成员初始化列表来完成我想要的:
class MainClass {
OtherClass Instance2;
MainClass() : Instance2("Foobar") {}
}
我只是对以下事实感到困惑:在第一个示例中,编译器理解我在使用默认构造函数时初始化了一个 OtherClass 成员,但如果我尝试使用它,它认为我正在声明一个函数需要字符串的构造函数。有人可以解释这背后的原因吗?如果还有我不知道的其他解决方法?
更新:这个声明歧义有一个名字:Most Vexing Parse
最佳答案
类内成员初始化器必须使用等号或{
花括号}
。
所以:
OtherClass Instance2 = "Foobar";
或:
OtherClass Instance2{ "Foobar" };
关于c++ - 使用参数化构造函数初始化类成员 - 编译器认为我正在声明一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46626464/