2013-03-04 89 views
-2

你好,我有三個類問題與C++鑄造

  1. AbstSoccerTeam
  2. PlayersSoccerTeam
  3. PlayersFieldPlayerStates

PlayerSoccerTeam是一個子類AbstSoccerTeam的。

bool AlanSoccerTeam::isClosestTeamMemberToSupportingPlayer(FieldPlayer* plyr) 

是球員足球隊的一種方法。

我試圖打電話給在PlayersFieldPlayerStates類方法與此

PlayersSoccerTeam* sTeam; 
sTeam->isClosestTeamMemberToSupportingPlayer(player); 

我能得到這個問題,當我運行它

未初始化的局部變量「蒸汽」使用

我不知道發生了什麼事情或爲什麼我得到這個錯誤。

任何幫助是極大 apprecitated感謝你

+0

它的意思正是它所說的;你有一個變量'sTeam',你試圖在不初始化的情況下使用它。如果你不明白爲什麼這是一個問題,問問你自己'應該由Team'Team'代表哪支球隊?''和'哪支球隊_does_'Team'代表? (以及爲什麼/如何代表該團隊?)' – bames53 2013-03-04 18:51:40

回答

1
PlayersSoccerTeam* sTeam; 

這行聲明一個指向PlayersSoccerTeam,沒有別的。你從這一行得到的只是一個指針。由於您尚未初始化,因此它沒有指向任何地方。沒有任何地方可以指向PlayersSoccerTeam

如果你想PlayersSoccerTeam類型的對象,那麼你只是想:

PlayersSoccerTeam sTeam; 
sTeam.isClosestTeamMemberToSupportingPlayer(player); 

既然你告訴我們你的層次,它可能是你想用你的PlayersSoccerTeam多態爲AbstSoccerTeam。在這種情況下,您需要使用指針或引用。可以這樣做,像這樣:

AbstSoccerTeam* sTeam = new PlayersSoccerTeam(); 
// ... 
delete sTeam; 

注意,這仍然只是聲明一個指針,但表達new PlayersSoccerTeam還創建了一個PlayersSoccerTeam對象的指針指向。請注意,將一個指向PlayersSoccerTeam的指針指向其父代的指針AbstSoccerTeam是完全正確的 - 這是多態行爲。如果你這樣做,你必須確保你以後再用delete sTeam;,否則對象會被泄漏。

一個更安全的方式來處理動態分配對象的用戶是使用智能指針,你可以做像這樣:

std::unique_ptr<AbstSoccerTeam> sTeam(new PlayersSoccerTeam()); 

現在,你將不必delete它,因爲std::unique_ptr需要的護理那對你。

+0

而更安全的[原文如此]將使用'make_unique' ... – rubenvb 2013-03-04 18:50:16

1

問題是你已經創建了一個指向PlayersSoccerTeam的指針,但是你還沒有實際創建對象。

我會建議這樣做。

PlayersSoccerTeam sTeam; 
sTeam.isClosestTeamMemberToSupportingPlayer(player); 

你也可以做到這一點。

PlayersSoccerTeam* sTeam = new PlayersSoccerTeam() 
sTeam->isClosestTeamMemberToSupportingPlayer(player); 

作爲也許是一個有趣的教育經驗,創建打印的東西,當它運行到stdout,然後嘗試做這兩個選項一個構造函數和你看看會發生什麼。無論何時創建新對象,都會運行構造函數。