Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.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++ 初始化成员数组';s与类中的其他成员的大小_C++_Class_Object - Fatal编程技术网

C++ 初始化成员数组';s与类中的其他成员的大小

C++ 初始化成员数组';s与类中的其他成员的大小,c++,class,object,C++,Class,Object,这是我的密码 class world{ public: int w; int h; int windowWidth = 80; int windowHeight = 46; char windowMap[windowHeight][windowWidth]; 我想使用windowWidth和windowHeight来设置windowMap[46][80]的大小,但是我得到了这个错误 警告:非静态数据成员初始值设定项仅适用于 -std=c++11或-std

这是我的密码

class world{
public:
    int w;
    int h;
    int windowWidth = 80;
    int windowHeight = 46;
    char windowMap[windowHeight][windowWidth];
我想使用windowWidth和windowHeight来设置windowMap[46][80]的大小,但是我得到了这个错误

警告:非静态数据成员初始值设定项仅适用于 -std=c++11或-std=gnu++11


有什么方法可以解决这个问题,还是有更好的方法可以获得相同的结果?

宽度和高度的变量必须是常量和静态的,因为它们应该在编译时可用。否则,您可以使用向量并在构造函数中动态分配内存。然后,您可以将windowMap的大小指定为参数,从而使类更加可重用

简单的改变是:

const static int windowWidth = 80;
const static int windowHeight = 46;

windowMap
字段初始化移动到构造函数

class world{
public:
    int w;
    int h;
    int windowWidth = 80;
    int windowHeight = 46;
    char **windowMap;
    world (){
        windowMap = new char*[windowWidth];
        for(int i = 0; i < windowWidth; i++)
            windowMap[i] = new char[windowHeight];
    }
};
阶级世界{
公众:
int w;
int-h;
int windowWidth=80;
内窗高度=46;
字符**窗口映射;
世界(){
windowMap=新字符*[windowWidth];
对于(int i=0;i
将字段声明为
static
将在此类的所有Instance中共享该字段,在这种情况下可能不喜欢该字段

不要忘记您必须在析构函数中调用delete[],否则会出现内存泄漏。

此问题被标记为C++11,这在C++11中是允许的(即使警告也表明)。因此,解决这个问题的方法是添加
-std=c++11
编译器标志(如果可能的话,这是我的建议)


N1ckles的答案可能是最好的,如果您使用OwnageIsMagic提出的动态分配方法,请不要忘记必须在析构函数中调用delete[]

如果您认为这与数组有关,请将其删除,然后查看错误是否消失。