2011-12-05 34 views
4

我是C++的新手,在做作業(數獨)時遇到了問題。C++:sudoku(抄板)

指令說:「您必須創建一個新的板作爲當前板的副本(使用 複製構造函數並從堆中分配新的板)。」

我試過(它wriiten在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時沒有問題。但它在運行時不起作用。

怎麼辦?真的需要幫助,thx!

這裏是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

板B =新局(&this);這是不對的。如果你想使用「new」,你需要將它定義爲Board * b。 –

+0

Sudoku求解器,是的!顯式內存處理,yikes! –

回答

7

變化:

Board b = new Board(&this); 

到:

Board *b = new Board(*this); 
+0

另外,如果你使用的是C++ 11兼容編譯器,我建議你返回一個std :: unique_ptr 或std :: shared_ptr 爲了管理你的新主板實例,他們可以在#include fronsacqc

+0

找到解決這個問題的唯一部分。我的猜測是'Board'沒有一個構造uctor,需要一個'Board **'作爲參數... –

+0

thx,但我仍然得到錯誤消息:作爲一元'操作數需要左值:( – Ferry

5
Board b = new Board(&this); 

這行有兩個錯誤,第一個是,如果你用new分配,類型將是Board *,而不僅僅是Board。第二個錯誤是,如果你想使用拷貝構造函數,你應當經thisthis不是地址所指向的元素:

Board * b = new Board(*this);