我试图初始化一个类成员,其中成员是另一个类的实例。 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
答案 0 :(得分:4)
一个类内成员初始值设定项必须使用等号或{
花括号}
。
所以:
OtherClass Instance2 = "Foobar";
或:
OtherClass Instance2{ "Foobar" };