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

Initializing class member with parameterized constructor - Compiler thinks I'm declaring a function?

本文关键字:声明 函数 一个 构造函数 参数 初始化 编译器 成员      更新时间:2023-10-16

我正在尝试初始化一个类成员,其中该成员是另一个类的实例。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" };