c++ - 如何在类中有一个二维数组作为私有(private)变量,然后在构造函数中设置

标签 c++ arrays

在我用 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/

相关文章:

c++ - 窗口出现奇怪的 SFML 错误

c++ - 将 std::weak_ptr 与 std::shared_ptr 一起用于阴影

c++ - delete 和 delete[] 的确切行为是什么?

c++ - 我如何读取文件的最后一行

java - 下载多个文件时线程 IllegalThreadStateException

javascript - 如何处理这些数据?

c++ - 如何将对非托管 dll 的访问限制为仅特定的第 3 方(拒绝所有其他人的访问)?

arrays - All_else 方法 (Ruby)

c - Double 到 Float 数组转换和 Endian 交换

C++,没有 <vector> 的对象数组