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[] 如果您认为这与数组有关,请将其删除,然后查看错误是否消失。