使用类中的另一个成员初始化成员数组的大小

Initializing a member array's size with another member within the class

本文关键字:成员 初始化 数组 另一个      更新时间:2023-10-16

这是我的代码

class world{
public:
    int w;
    int h;
    int windowWidth = 80;
    int windowHeight = 46;
    char windowMap[windowHeight][windowWidth];

我想通过使用windowWidth和windowwheight来设置windowMap[46][80]的大小,但是我得到了这个错误

警告:非静态数据成员初始化式只能用-std=c++11或-std=gnu++11

是否有办法解决这个问题,或者有更好的方法实现相同的结果?

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

简单的修改如下:

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

这个问题is标记为c++ 11,这个是c++ 11允许的(即使警告指示)。因此,解决这个问题的一种方法是添加-std=c++11编译器标志(如果可能的话,这是我的建议)

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

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];
    }
};

将field声明为static将在这个类的所有实例中共享它,在这种情况下可能不太可取。

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