2012-04-13 269 views
2

我是C++的新手,我試圖編寫一個模擬足球比賽的程序。我得到一個編譯器錯誤,說明函數get_rank,get_player和get_name未在此範圍內聲明。任何幫助是極大的讚賞!函數「未在此範圍內聲明」

#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 

class Player { 
    int playerNum; 
    string playerPos; 
    float playerRank; 
    public: 
     void set_values(int, string, float); 
     float get_rank(){ return playerRank; }; 
}; 

class Team { 
    Player team[]; 
    string teamName; 
    public: 
     void set_values(Player[],string); 
     Player get_player(int a) { return team[a]; }; 
     string get_name() { return teamName; }; 
}; 


void play(Team t1, Team t2){ 
    float t1rank = 0.0; 
    float t2rank = 0.0; 
    for(int i=0; i<11; i++){ 
     t1rank += get_rank(get_player(t1, i)); 
    } 
    for(int j=0; j<11; j++){ 
     t2rank += get_rank(get_player(t2, j)); 
    } 
    if(t1rank>t2rank){ 
     cout << get_name(t1) + " wins!"; 
    } 
    else if(t2rank>t1rank){ 
     cout << get_name(t2) + " wins!"; 
    } 
    else{ 
     cout << "It was a tie!"; 
    } 
} 
+0

請注意,您是通過值返回對象,而不是通過引用。這意味着像'++ t1.get_player(0).playerRank'這樣的代碼將不會修改第一個玩家的等級。 – DCoder 2012-04-13 19:41:44

+0

我並沒有試圖修改玩家的等級,而是加入了隊伍中所有玩家的等級。 – user1332364 2012-04-13 19:44:04

+0

我意識到這一點,剛剛提到它,所以在其他一些情況下您不會絆倒它。 – DCoder 2012-04-13 19:46:58

回答

8

看起來你想要做的事,如:

t1rank += t1.get_player(i).get_rank(); 

在C++中,方法調用的形式爲object.method(args)的。在你的情況下,你有兩個方法調用,其中objectt1和方法是get_player,第二個對象是前一個調用的返回值,方法是get_rank

+0

是的!絕對是這樣做的。非常感謝! – user1332364 2012-04-13 19:41:28