在我用 Visual C++ 编写的平台游戏中,每个关卡最初都存储为二维整数数组。我认为将这个数组存储在一个类中更有意义,因此我创建了一个名为 Level 的类。它看起来像这样:
class Level {
private:
int map[20][30];
public:
Level(int a[20][30]) {
map = a;
}
int getcell(int row, int column) {
return map[row][column];
}
};
据我所知 - 从查找关于类构造函数的教程,并将二维数组作为参数传递,这应该可行,所以我真的不明白为什么不行。
在我执行 map = a
的那一行,我得到一个错误:Error: expression must be a modifiable lvalue
。我在 stackoverflow 上查看了这个错误,但找不到与我的问题相关的任何答案。
那么,我该如何解决这个错误呢?
最佳答案
这实际上与构造函数没有任何关系。您不能在 C++ 中分配数组。无论是在构造函数中,还是在其他任何地方。
有两种方法可以解决这个问题。第一种方式是蛮力方式。而不是
map = a;
编写一个循环,将数组的内容从构造函数的参数复制到类成员数组中。
第二种方式是把数组塞进一个中间类:
class Level {
public:
struct level_map {
int map[20][30];
};
private:
level_map map;
public:
Level(const level_map &initial_map) : map(initial_map)
{
}
int getcell(int row, int column) {
return level_map.map[row][column];
}
};
这可能实用也可能不实用,并且会引入更多的复杂性。
但真正的答案是使用 std::vector
而不是普通数组,这将解决所有这些问题。
关于c++ - 如何在类中有一个二维数组作为私有(private)变量,然后在构造函数中设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37732307/