gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:50:35 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com