C++ C++;在构造函数中设置类成员数组的二维数组大小

C++ C++;在构造函数中设置类成员数组的二维数组大小,c++,arrays,C++,Arrays,我只找到了一维阵列的解决方案,但无法将其应用于二维阵列。 可能的解决方案包括“向量”、“模板”和“指向数组的指针” 我知道我可以让向量工作,但我宁愿使用其他2个。最好是模板,因为我不想手动破坏,但指针也可以工作。(指针将指向构造函数中创建的数组) 该类包含一个名为screen的空二维数组。构造函数应该设置其大小。我尝试了太多的东西,无法在这里一一列出,但我会展示我目前拥有的东西。(我最后尝试的是指向构造函数中创建的数组的指针。在本例中,屏幕是一个字符指针) 新表达式中的数组大小必须为常量 我没有

我只找到了一维阵列的解决方案,但无法将其应用于二维阵列。 可能的解决方案包括“向量”、“模板”和“指向数组的指针”

我知道我可以让向量工作,但我宁愿使用其他2个。最好是模板,因为我不想手动破坏,但指针也可以工作。(指针将指向构造函数中创建的数组)

该类包含一个名为screen的空二维数组。构造函数应该设置其大小。我尝试了太多的东西,无法在这里一一列出,但我会展示我目前拥有的东西。(我最后尝试的是指向构造函数中创建的数组的指针。在本例中,屏幕是一个字符指针)

新表达式中的数组大小必须为常量


我没有实现这两种策略中的任何一种,并且在尝试使其工作时遇到了各种各样的错误。我该如何解决这个问题?(我主要想知道如何使用模板实现这一点。如果不可能,则使用指向构造函数中创建的数组的指针)

这个问题有点含糊不清,但听起来您希望在给定一些输入的情况下动态分配数组。 编辑我更改了答案以匹配您提供的代码。这将在给定高度和宽度的情况下创建一个二维字符数组

class Screen {
    private:
        char **data;
        int rows;
        int columns;

    public:
        Screen(int num_rows, int num_cols); 
}; 

Screen::Screen(int num_rows, int num_cols) {
    data = new char * [num_rows];
    for (int i = 0; i < num_rows; ++i) {
        data[i] = new char[num_cols];
    }
    rows = num_rows;
    columns = num_cols;
}
类屏幕{
私人:
字符**数据;
int行;
int列;
公众:
屏幕(整数行、整数列);
}; 
屏幕::屏幕(整数行,整数列){
数据=新字符*[num_行];
对于(int i=0;i
这将创建一个空的2D字符数组

说明:c中的所有数组都只是指向所声明类型的内存中第一个块的指针。通过将成员变量作为双指针,可以得到一个char指针数组,每个char指针指向各自数组中的第一个值

但是要小心,您需要通过声明析构函数来释放数据变量以避免内存泄漏

Screen::~Screen() {
    for (int i = 0; i < rows; ++i) {
        delete[] data[i];
    }
    delete[] data;
}
Screen::~Screen(){
对于(int i=0;i
向量、模板和指向数组的指针是如何连接的。。。不管怎样,我不明白你的问题。发布一些您尝试编写的实际代码,我们将看到其中的错误。首先添加一些代码,向我们展示您尝试的内容。
w
h
值是否在编译时都已知?使用带有二维索引运算符的一维数组可能是最佳解决方案编译时不知道这些值(可能),但不需要在创建类后进行更改。(这就是为什么我真的不想使用向量,因为我不打算扩展数组,只需要数组功能)你忘了释放析构函数中的某些内容
delete[]data
这是一个很大的麻烦,违反了三条规则-你应该使用向量或向量向量向量来代替这种方法。我同意向量向量要容易得多,但他确实问过如何使用构造函数中的模板或数组指针来实现这一点。
Screen::~Screen() {
    for (int i = 0; i < rows; ++i) {
        delete[] data[i];
    }
    delete[] data;
}