2012-04-13 17 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

+0

私はプレイヤーのランクを変更するのではなく、チームのすべてのプレイヤーのランクを追加しようとしています。 – user1332364

+0

私はそれを知っています、ちょうどそれを言いましたので、あなたは他のいくつかの状況でそれを越えることはありません。 – DCoder

答えて

8

それはあなたが何かやりたいようになります:C++で

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

を、メソッド呼び出しがフォームobject.method(args)です。あなたのケースでは、objectt1であり、メソッドがget_playerである2つのメソッド呼び出しと、前回の呼び出しの戻り値が2番目のメソッドであり、メソッドがget_rankの2つのメソッド呼び出しがあります。

+0

はい!間違いなくトリックをやった。本当にありがとう! – user1332364