我是c ++的新手,在做作业时遇到了问题(数独)。
指令说:“你必须创建一个新的董事会作为当前董事会的副本(使用 复制构造函数并使用new分配堆中的板。“
我已经尝试过了(在board.cc中已经知道了):
#include "board.h"
// Search for a solution, returns NULL if no solution found
Board* Board::search(void) {
Board b = new Board(&this);
...
return b;
}
收到错误消息:
lvalue required as unary '&' operand.
我也试过了:
Board* Board::search(void) {
Board b;
Board *b3;
b3 = &b;
...
return b3;
}
当comp时,这没有任何问题。但它在运行时都不起作用。
怎么做?真的需要帮助,谢谢!
以下是board.h的一些代码:
class Board {
private:
Field fs[9][9]; // All fields on board
public:
// Initialize board
Board(void) {
// Uses the default constructor of Field!
}
// Copy board
Board(const Board& b) {
for(int i = 0; i < 9; i++){
for(int j = 0; j < 9; j++){
fs[i][j] = b.fs[i][j];
}
}
}
// Assignment operator for board
Board& operator=(const Board& b) {
if(this != &b){
for(int i = 0; i < 9; i++){
for(int j = 0; j < 9; j++){
fs[i][j] = b.fs[i][j];
}
}
}
return *this;
}
....
可在此处找到完整说明: http://www.kth.se/polopoly_fs/1.136980!/Menu/general/column-content/attachment/2-2.pdf
代码:http://www.kth.se/polopoly_fs/1.136981!/Menu/general/column-content/attachment/2-2.zip
答案 0 :(得分:7)
变化:
Board b = new Board(&this);
为:
Board *b = new Board(*this);
答案 1 :(得分:5)
Board b = new Board(&this);
该行有两个错误,第一个是如果您使用new
进行分配,则类型将为Board *
,而不仅仅是Board
。第二个错误是,如果要使用复制构造函数,则应传递this
指向的元素,而不是this
的地址:
Board * b = new Board( *this );