Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 类中未初始化的常量成员_C++ - Fatal编程技术网

C++ 类中未初始化的常量成员

C++ 类中未初始化的常量成员,c++,C++,这可能是一个简单得可笑的问题,但我已经搜索了一段时间了,但似乎还没有找到答案。我试图初始化类中的常量变量常量指针。以下是头文件: class Scheduler{ public: Scheduler(); explicit Scheduler( unsigned long * ); private: const unsigned long *const thresh; }; 这是这个类的构造函数 Scheduler::Scheduler( unsigned long *

这可能是一个简单得可笑的问题,但我已经搜索了一段时间了,但似乎还没有找到答案。我试图初始化类中的常量变量常量指针。以下是头文件:

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初始化thresh,要么禁用默认构造函数。

问题出在默认构造函数中,应该是

Scheduler::Scheduler() : thresh(0) {}
或者根本不实现。

您的代码适合我(MSVC2010)——我认为它应该这样做。您正在尝试使用哪个编译器?

编译器可能/应该对代码提出的唯一抱怨是,由于const成员的原因,无法创建自动复制构造函数和赋值运算符。

我认为您指的是VC++的“愚蠢警告”。警告这些事情没有什么特别的意义。当然,您的里程数可能会有所不同;-)尽管如此,我在回答中还是遗漏了默认的ctor——其他海报上说也需要初始化const成员是正确的。那么我如何修复警告呢?我继承自
boost::noncopyable
以指示该类不应该是可复制/可分配的。。。两个新警告:现在它也无法创建隐式复制构造函数!您的代码似乎缺少默认构造函数的实现,这就是错误的来源。