2010-12-03 34 views
10

这可能是一个可笑的简单问题,但我一直在寻找答案一段时间,但似乎无法弄清楚这一点。我试图初始化一个类中的常量变量常量指针。这里是头文件:类中未初始化的常量成员

class Scheduler{ 
    public: 
    Scheduler(); 
    explicit Scheduler(unsigned long *); 

    private: 
    const unsigned long *const thresh; 

}; 

这里是类

Scheduler::Scheduler(unsigned long * threshold): 
    thresh(threshold) 
{} 

当我尝试编译此代码我碰到这个错误的构造器:

scheduler.cpp: In constructor ‘Scheduler::Scheduler()’: 
scheduler.cpp:3: error: uninitialized member ‘Scheduler::thresh’ with ‘const’ type ‘const long unsigned int* const’ 

多种来源在线讨论成员变量的构造函数中的常量成员变量指向使用初始值设定项列表。我想我正在做我应该做的事,但显然它还是不好。任何人都可以看到有什么不对?

+0

你的代码似乎缺少默认构造函数的实现,这是错误来自的地方。 – visitor 2010-12-03 10:24:40

回答

14

您必须在初始化列表中初始化您的常量成员全部构造函数。你只为有争论的人做这件事。做它默认的一个,并且一切都会很顺利。在这种特殊情况下,或者用0初始化你的thresh,或者禁用默认的构造函数。

+0

这正是我所需要的。谢谢! – 2010-12-03 20:15:49

6

的问题是在默认的构造函数,它应该是

Scheduler::Scheduler() : thresh(0) {} 

或根本不执行。

0

你的代码适合我(MSVC2010) - 我相信它应该。你在用什么编译器?
编译器可能/应该对代码提出的唯一抱怨是警告:由于const成员,无法创建自动复制构造函数和赋值运算符。

+0

我想你是指VC++的“愚蠢警告”。警告这些事情没有特别的意义。 – visitor 2010-12-03 10:22:33