C++ 重载运算符后打印二维数组<&书信电报;

C++ 重载运算符后打印二维数组<&书信电报;,c++,multidimensional-array,operator-overloading,C++,Multidimensional Array,Operator Overloading,我正试图使操作员过载您有一些问题。首先,在构造函数中 char** board = new char*[n]; 此声明隐藏您拥有的类成员板。这意味着当构造函数退出板时,类成员保持未初始化状态。你需要的只是 board = new char*[n]; 来解决这个问题 您的第二个问题与构造函数中的n相同。您有一个名为n的构造函数参数,它隐藏了类的n成员。访问类的n,如 this->n = (n >= 3) ? n : 3; 或者只需将Board::Board(intn)更改为类似B

我正试图使操作员过载您有一些问题。首先,在构造函数中

char** board = new char*[n];
此声明隐藏您拥有的类成员
。这意味着当构造函数退出
板时,类成员保持未初始化状态。你需要的只是

board = new char*[n];
来解决这个问题

您的第二个问题与构造函数中的
n
相同。您有一个名为
n
的构造函数参数,它隐藏了类的
n
成员。访问类的
n
,如

this->n = (n >= 3) ? n : 3;
或者只需将
Board::Board(intn)
更改为类似
Board::Board(intn)
,然后使用

n = (n_ >= 3) ? n_ : 3;
第三个问题是复制构造函数。它不分配任何内存,因此您对
线路板
所做的所有写入操作都是未定义的行为。你需要换成

Board::Board(const Board& another) { // copy contructor
    n = another.n;
    board = new char*[n];
    for (int i = 0; i < n; i++){
        board[i] = new char[n];
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            board[i][j] = another.board[i][j]; // take values from original board into the copy board
        }
    }
}

要做到这一点。

您有一些问题。首先,在构造函数中

char** board = new char*[n];
此声明隐藏您拥有的类成员
。这意味着当构造函数退出
板时,类成员保持未初始化状态。你需要的只是

board = new char*[n];
来解决这个问题

您的第二个问题与构造函数中的
n
相同。您有一个名为
n
的构造函数参数,它隐藏了类的
n
成员。访问类的
n
,如

this->n = (n >= 3) ? n : 3;
或者只需将
Board::Board(intn)
更改为类似
Board::Board(intn)
,然后使用

n = (n_ >= 3) ? n_ : 3;
第三个问题是复制构造函数。它不分配任何内存,因此您对
线路板
所做的所有写入操作都是未定义的行为。你需要换成

Board::Board(const Board& another) { // copy contructor
    n = another.n;
    board = new char*[n];
    for (int i = 0; i < n; i++){
        board[i] = new char[n];
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            board[i][j] = another.board[i][j]; // take values from original board into the copy board
        }
    }
}

要做到这一点。

谢谢,我知道我必须在复制构造函数中分配内存。我忘了将
另一个.board
指针设置为
null
。但是在我设置了你给它的所有更改之后,仍然不要使用重载操作符
@itzikb发现了问题。我已经更新了答案,“新的”第二期部分解释了这个问题。谢谢,我知道我必须在复制构造函数中分配内存。我忘了将
另一个.board
指针设置为
null
。但是在我设置了你给它的所有更改之后,仍然不要使用重载操作符
@itzikb发现了问题。我已经更新了答案,“新”的第二期部分解释了这个问题。