【发布时间】:2017-01-16 15:39:35
【问题描述】:
我有一个在 .h 文件中创建的对象,应该在构造函数中初始化。这个对象被传递了一个 COM 端口号,在我们当前的应用程序中是 5。为此,我在 .h 文件中创建了一个 const int。
编辑:我添加了一个更完整的示例
class ClassB
{
public:
ClassB(int comPort);
private:
int m_comPort;
};
ClassB::ClassB(int comPort) :
m_comPort(comPort)
{
}
class ClassA
{
public:
ClassA();
private:
const int comPort;
ClassB B;
};
ClassA::ClassA() :
comPort(5),
B(comPort)
{
}
int main()
{
ClassA A;
return 0;
}
因为对象是在 comPort 完全初始化之前初始化的,所以 comPort 的值是垃圾。
规避此问题的正确方法是什么?我可以想到以下几点:
- 初始化头文件中的const int
- 在构造函数体中创建并初始化对象
- 使用#define
【问题讨论】:
-
如果在
B之前的类中定义了comPort,那么它就不是垃圾。这里没有足够的信息来回答您的问题或重现问题。 -
我会编辑一个更完整的例子,抱歉!
-
我看不出你是如何在这里得到垃圾的。代码看起来正确。
-
它应该仍然可以正常工作。是
m_comPort你看到的问题吗? -
@YouKnowNothingJohn 你确定在
B之前在classA中声明comPort?
标签: c++ c++11 initialization initializer-list