使用参数化构造函数初始化类成员 - 编译器认为我正在声明一个函数?

时间:2017-10-08 00:35:28

标签: c++

我试图初始化一个类成员,其中成员是另一个类的实例。 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

1 个答案:

答案 0 :(得分:4)

一个类内成员初始值设定项必须使用等号或{花括号}

所以:

OtherClass Instance2 = "Foobar";

或:

OtherClass Instance2{ "Foobar" };