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发现了问题。我已经更新了答案,“新”的第二期部分解释了这个问题。