我目前正在編寫C++中的n-puzzle,但由於某些原因,我無法交換板的元素。讓我解釋。我有一個「Piece」類(這個類的一些方法):C++ - 自定義類型不工作的交換功能
Piece::Piece(int l, int c, int n):
line(l),
column(c),
number(n)
{
}
int Piece::getLine()
{
return line;
}
int Piece::getColumn() const
{
return column;
}
int Piece::getNumber() const
{
return number;
}
void Piece::setLine(const int new_line)
{
this -> line = new_line;
}
void Piece::setColumn(const int new_column)
{
this -> column = new_column;
}
void Piece::setNumber(const int new_number)
{
this -> number = new_number;
}
我也有一個Board類執行遊戲。董事會是一個「片」類型的矢量向量。該板正在創建以下代碼:
for(size_t i = 0; i < this -> width; i++)
{
vector<Piece> row;
for(size_t j = 0; j < this -> height; j++)
{
row.push_back(Piece(i, j, ((j == this -> width - 1) && (i == this -> height - 1) ? 0 : i * this -> width + j + 1)));
}
board.push_back(row);
}
沒有什麼是錯的,直到這裏。問題是我想交換董事會的兩個要素。想象一下,我們有一個3x3的遊戲。如果我運行下面的代碼的結果將是錯誤的
swapPieces(board[0][0], board[1][0]);
swapPieces(board[1][0], board[2][0]);
cout << board[0][0] << "\t" << board[0][0].getLine() << endl;
拼圖是正確的:
但是由執行board [0] [0] .getLine()的輸出是1,這是片的初始位置!我真的不知道我做錯了什麼。我會很感激,如果有人能夠給我一個手:)
編輯:swapPieces補充說:
void Board::swapPieces(Piece &p1, Piece &p2)
{
Piece p = p1;
p1 = p2;
p2 = p;
}
至少,我們需要看到更多的代碼,顯示'board'的確切聲明和定義,以及,當然,'swapPieces'。 – 2013-03-18 17:49:10
問題是你沒有給我們swapPieces函數的代碼,而你知道問題出在這個函數中...... – 2013-03-18 17:51:02
Stephane Rolland:我添加了swapPieces,這是我的錯!抱歉。 – pluralism 2013-03-18 17:52:44