我试图用一个静态成员变量MAX_DIST定义一个类Util,在下面的意义上,
class Util{
public:
static double MAX_DIST;
Util():MAX_DIST(400.0){}
};
Run Code Online (Sandbox Code Playgroud)
并能够在其他类中更新它,例如
Util::MAX_DIST = 387.98;
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误:
‘double Util::MAX_DIST’ is a static data member; it can only be initialized at its definition
Run Code Online (Sandbox Code Playgroud)
但是,如果我在其定义中初始化MAX_DIST,例如
class Util{
public:
static const double MAX_DIST = 400;
Util();
};
Run Code Online (Sandbox Code Playgroud)
(我必须按照编译器的指示添加'const',否则我会得到一个"ISO C++禁止非const静态成员的类内初始化"错误)现在我无法在其他地方修改MAX_DIST,因为它现在是只准备好:
error: assignment of read-only variable ‘Util::MAX_DIST’
Run Code Online (Sandbox Code Playgroud)
在网上搜索无效之后,我无法找到解决这个悖论的方法.有人可以帮我吗?
在我的C++程序中,我试图用全0来初始化一个3*3*3类型的double数组.在类头文件中,我声明了一个成员
double list[3][3][3];
Run Code Online (Sandbox Code Playgroud)
当我打印出这个数组的内容时,我发现并非所有条目都是0,正如我预期的那样.例如list [1] [1] [1]的值为4.03158e-321
因此,我手动将此数组初始化为构造函数中的所有0:
list = {{{0,0,0},{0,0,0},{0,0,0}},
{{0,0,0},{0,0,0},{0,0,0}},
{{0,0,0},{0,0,0},{0,0,0}}};
Run Code Online (Sandbox Code Playgroud)
这使我的程序工作,但是,我得到了编译器警告:
warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x
Run Code Online (Sandbox Code Playgroud)
因此,我的问题是
我的编译器是g ++(Ubuntu/Linaro 4.5.2-8ubuntu4)4.5.2,gcc版本4.5.2(Ubuntu/Linaro 4.5.2-8ubuntu4)