C ++:数独(抄板)

时间:2011-12-05 12:09:11

标签: c++ sudoku

我是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

2 个答案:

答案 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 );