这是我的代码
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
有没有办法解决这个或更好的方法来实现相同的结果?
答案 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 []或者你有内存泄漏。