小编yan*_*ang的帖子

在C++中修改静态成员变量

我试图用一个静态成员变量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++ static-members

5
推荐指数
2
解决办法
2万
查看次数

g ++警告声明多维,双数组

在我的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)

因此,我的问题是

  1. 为什么列表在标题中初始化后会有非零条目?
  2. 为什么我会收到上述警告信息,以及如何摆脱它?

我的编译器是g ++(Ubuntu/Linaro 4.5.2-8ubuntu4)4.5.2,gcc版本4.5.2(Ubuntu/Linaro 4.5.2-8ubuntu4)

c++ g++ multidimensional-array

1
推荐指数
1
解决办法
442
查看次数

标签 统计

c++ ×2

g++ ×1

multidimensional-array ×1

static-members ×1