使用参数化构造函数初始化类成员 - 编译器认为我在声明一个函数?
Initializing class member with parameterized constructor - Compiler thinks I'm declaring a function?
我正在尝试初始化一个类成员,其中该成员是另一个类的实例。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++:为什么允许在另一个函数中声明函数,而不允许在函数定义中声明?
- 在c++中在类外声明函数有什么好处
- 使用 #define 声明函数
- 在静态库中声明函数,在使用该相同库的应用程序中定义它
- 如何强制编译器在 C/C++ 本身中声明函数?
- 如果您只需要在 .h 文件中声明函数.cpp是否需要在 .h 文件中声明函数?
- C++:<sys/sysctl.h> 无法声明函数CTL_HW和HW_NCPU
- 尝试声明函数的局部变量,但得到范围错误
- 如何在C++模板中声明函数
- 如何在另一个文件的类中声明函数
- 使用非类型模板参数正向声明函数模板
- 在此范围错误中未声明函数错误
- 当我们不能声明函数内联(GCC 编译器)时?
- 未在此作用域中声明函数,即使存在头文件也是如此
- 无法声明函数中的模板类型别名
- 单个CPP文件中多次声明函数声明可以吗?
- 编译一个支持VBA中声明函数的dll
- 使用从外部参数包中获取的参数类型声明函数
- 使用类成员正确地声明函数
- 在函数内重新声明函数