我有 17 个整数常量,我想在我的课堂上作为私有常量。真的有必要使用初始化列表吗?
我在某处读到我可以为头文件中的常量赋值,但它似乎不起作用。我收到此错误消息:
sorry, unimplemented: non-static data member initializers
我有 17 个整数常量,我想在我的课堂上作为私有常量。真的有必要使用初始化列表吗?
我在某处读到我可以为头文件中的常量赋值,但它似乎不起作用。我收到此错误消息:
sorry, unimplemented: non-static data member initializers
真的有必要使用初始化列表吗?
在现代(2011 年)C++ 中,没有。在旧版本的语言中,是的。
您的错误消息很抱歉您的编译器尚不支持非静态成员的新初始化语法。假设您使用的是 GCC(因为我从该编译器中识别出该错误),那么根据此页面,您需要将该功能至少升级到 4.7 版本。
或者,由于它们是私有且恒定的,您可以考虑将它们从类中移出到类的实现文件中的本地命名空间中。当然,这仅在您不需要从任何内联成员函数访问它们时才有效。
最后,如果它们对于类的所有实例具有相同的值(这很可能,因为它们是const
并且您可以独立于构造函数参数来初始化它们),您可以声明它们static
。然后可以在它们的声明中初始化它们(尽管旧的编译器可能只允许它们具有整数类型)。但是,如果它们是odr-used(粗略地说,如果您需要对它们进行指针或引用),那么它们也需要在一个源文件中定义。
。H:
class MyClass {
public:
MyClass();
~MyClass();
int doSomething();
private:
const int m_newint = 1;
const int m_dosomething = 2;
};
.cc:
MyClass::MyClass() {}
MyClass::~MyClass() {}
int MyClass::doSomething() {
return m_dosomething;
}
是有效的 C++11 代码,请确保您的编译器设置-std=c++11
为使用该功能。