2013-06-11 75 views
0

我現在有一些與我的代碼有關的重大問題,我希望有人可以對此有所瞭解。C++分配另一個對象的對象值失敗

在我的代碼中,我做了;球員=新球員* [2];連同玩家[i] =新玩家();在for循環中。給他們真正的價值。

後來在我的代碼,然後我想這樣做:

players[0] = players[1]; 
delete players[1]; 

在調試。玩家[0]獲得玩家的價值[1]。但接下來的線路選手[0]得到;字符串名稱= < Bad Ptr>以及一些int值變爲-17912312。

我的第一個想法是我需要在Player中創建一個operator =så。我創建:

Player& operator=(const Player& right);

Player& Player::operator=(const Player& right) 
{ 
this->name=right.name; 
this->coins=right.coins; 
this->bet=right.bet; 
return *this; 
} 

這是沒有效果的。它甚至沒有進入功能。爲什麼我不能分配值?

+1

您不能爲指針重載'operator ='。爲什麼不只是使用對象而不是指針,並擺脫重載操作符,它基本上與默認操作符相同。 – chris

+0

你能在代碼中輸入嗎? – 413X

+0

而不是使用指針和'new',只需使用'Player players [2];'。沒有內存泄漏,更好的語法,沒有堆分配。 – chris

回答

0

所示代碼players[0] = players[1];將泄漏players[0]最初指出的對象。在接下來的聲明中,您可以在兩個插槽中的一個指針背後隱藏對象。如果您不立即將其設置爲NULL,那麼您將持有不可用於任何內容的懸掛指針。

寫op =與案例完全無關,您不應該這樣做。

+0

非常感謝你 – 413X

0

這是一個懸而未決的指針問題。當你完成任務時

players[0] = players[1]; 

並且在刪除玩家後[1],你實際上使兩個存儲位置都不可訪問。你能解釋一下你的目標好一點嗎?就像已經說過的,你不能對指針做一個operator = overload。爲什麼你首先需要移除玩家[1]?澄清時將使用更新的建議進行編輯!

+0

我在做一個小遊戲。當其中一名球員輸掉比賽時,我想將他們完全移除。 – 413X

相關問題