【发布时间】:2020-07-20 20:56:24
【问题描述】:
这是 MFC C++(不是 C++ 0x11)。我有一个类,它有一个 CDerivedComboBox 的成员变量,称之为 CMyForm。我想为 CDerivedComboBox 创建一个构造函数,它传入一个参数,所以当我声明它时,我可以传递一个标志,也可以不传递。
例如在.h文件中,有两个构造函数
CDerivedComboBox();
CDerivedComboBox(bool specialFlag);
添加该构造函数实现时它编译得很好,但是在我使用它的类中,我无法弄清楚如何实际创建一个调用该构造函数的函数。这在 C++ 中是不可能的吗/
CDerivedComboBox combo; // works
CDerivedComboBox comboParam(true); // does not work
【问题讨论】:
-
试试
CDerivedComboBox comboParam{true};(注意用大括号代替括号)。应该使用足够现代的编译器。 -
啊,在 VS2019 中确实有效,但在 VS2008 中无效。谢谢!
-
如果编译器不够现代,您必须在包含类的构造函数初始值设定项列表中提供参数。例如。
class CMyForm { CDerivedComboBox combo; CMyForm() : combo(true) {} }; -
Pre C++11 你可以使用更明确的初始化器:
CDerivedComboBox comboParam = CDerivedComboBox(true);。 -
specialFlag实际上是运行时决定吗?如果不是,请改用类型系统,派生CSpecialComboBox并让其实例成为您的类成员。CSpecialComboBox知道,这很特别。无需传递任何标志。