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

时间:2016-11-12 10:37:15

标签: 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 = gnu ++ 11

有没有办法解决这个或更好的方法来实现相同的结果?

3 个答案:

答案 0 :(得分:2)

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

简单的改变是:

var sortedDict = from entry in myDict
                             orderby entry.Value
                                 ascending
                             select entry;

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

将字段声明为static将在此类的所有实例中共享它,在这种情况下可能不喜欢。

不要忘记你必须在析构函数中调用delete []或者你有内存泄漏。