使用类中的另一个成员初始化成员数组的大小
Initializing a member array's size with another member within the class
这是我的代码
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[],否则你会有内存泄漏
相关文章:
- C++成员初始化
- c++构造函数成员初始化:传递参数
- C++正确的指针成员初始化
- 将另一个类的对象传递到当前类C++的构造函数中(不是成员初始化)
- WinLamb 错误:成员初始化非法
- 使用其他成员初始化结构的成员?
- C++模板类静态成员初始化
- 解释了构造函数成员初始化列表
- 如何在成员初始化列表中声明共享指针
- C++入门5版:使用get成员初始化另一个与shared_ptr无关的对象
- C++11 默认类成员初始化与初始值设定项列表同时
- 调用非默认构造函数作为成员初始化
- C++模板成员初始化:用右值移动构造,但用左值移动引用
- 类成员初始化C++
- 在成员初始化列表中,我可以创建对列表中不在列表中的成员变量的引用
- C :(不重复)积分静态成员初始化(不仅是声明!),导致链接器错误,原因
- 如何调用成员初始化器列表中参考成员的构造函数
- C 构造函数采用成员初始化器
- 与其他静态const成员初始化静态常量成员
- 静态内联成员初始化顺序