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

标签 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

最佳答案

类内成员初始化器必须使用等号或{花括号}

所以:

OtherClass Instance2 = "Foobar";

或:

OtherClass Instance2{ "Foobar" };

关于c++ - 使用参数化构造函数初始化类成员 - 编译器认为我正在声明一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46626464/

相关文章:

c++ - 在分析代码时,我应该使用匹配的 (gcc) 编译器优化标志吗?

c++11 列表 push_back() 实例错误?

c++ - 如何在 CUDA 中(有效地)打包位?

c++ - 是否有像映射这样的 C++ 结构,但我得到的不是值的键,而是值的句柄?

c++ - C/C++ Allegro 程序无法运行

c++ - 检查类型实例是否可以流式传输

c++ - 反转堆栈时出错,你能指出来吗?

c++ - 引用指针和引用重载

c++ - 当二维数组是类的数据成员时,获取二维数组元素的获取函数

c++ - 为什么 vector 的容量和大小不同?