0

これに多少関連する質問がたくさんあることは知っていますが、それらの答えは私には理解するのが少し難しいです. いくつかの異なるコード行に対して次のエラーが表示されます。

C:\Users\Jeff\AppData\Local\Temp\ccAixtmT.o:football.cpp:(.text+0x6f0): undefined 
reference to `Player::set_values(int, std::string, float)'

これらのコード ブロックから:

class Player {
int playerNum;
string playerPos;
float playerRank;
public:
    void set_values(int, string, float);
    float get_rank(){ return playerRank; };
    bool operator == (const Player &p1/*, const Player &p2*/) const
    {
    if(&p1.playerNum == &playerNum &&
       &p1.playerPos == &playerPos &&
       &p1.playerRank == &playerRank)
       return true;
    else
       return false; };
};

そして、これはサブクラスを参照するメイン関数です:

int main() {

ifstream infile;
infile.open ("input.txt", ifstream::in);
int numTeams;
string command;
while(!infile.fail() && !infile.eof()){
    infile >> numTeams;
    string name;
    Player p;
    int playNum;
    string playPos;
    float playRank;
    Player all[11];
    float ranks[11];
    Team allTeams[numTeams];
    for(int i=0; i<numTeams; i++){
        infile >> name;
        for(int j=0; j<11; j++){
            infile >> playNum;
            infile >> playPos;
            infile >> playRank;
            if(playPos == "QB")
                p.set_values(playNum, playPos, (playRank*2.0));
            else if(playPos == "RB")
                p.set_values(playNum, playPos, (playRank*1.5));
            else if(playPos == "WR")
                p.set_values(playNum, playPos, (playRank/1.8));
            else if(playPos == "TE")
                p.set_values(playNum, playPos, (playRank*1.1));
            else if(playPos == "GD")
                p.set_values(playNum, playPos, (playRank/2.0));
            else if(playPos == "TC")
                p.set_values(playNum, playPos, (playRank/2.2));
            else if(playPos == "CR")
                p.set_values(playNum, playPos, (playRank/1.2));
            all[j] = p;
            allTeams[i].set_values(all, name);
        }
    }
    infile >> command;
    if (command == "play"){ 
        int t1;
        int t2;
        infile >> t1;
        infile >> t2;
        play(allTeams[t1], allTeams[t2]); 
    }
    else { 
        int t1;
        int p1;
        int t2;
        int p2;
        swap(allTeams[t1], allTeams[t1].get_player(p1), allTeams[t2], allTeams[t2].get_player(p2)); }
}
}
4

3 に答える 3

4

クラスで宣言set_valuesしましたが、他のクラスで行ったようにボディを提供しませんでした。関数を呼び出すと、実行するものは何もありません!

于 2012-04-13T22:51:41.303 に答える
3

さて、ここにはいくつかの間違いがありますが、あなたの質問に関して、set_value の実装方法は次のとおりです。

 void set_values(int playerNumParam, string playerPosParam, float playerRankParam){
     playerNum = playerNumParam;
     playerPos = playerPosParam;
     playerRank = playerRankParam;
}

このリンクを参照してください:コンストラクターとデストラクタ

また、良い習慣として、クラスメンバー変数にアンダースコアを付けて名前を付けることを常にお勧めします

playerNum_
playerPos_
playerRank_

それが役に立ったことを願っています!

于 2012-04-13T22:52:39.150 に答える
0

関数を見つけることができないいくつかの異なる考えられる理由。

1つは、別のc ++ファイルでクラスを宣言しました。これは、現在のc++ファイルがmainと宣言したファイル内でクラスを見つけることができないことを意味します。この問題の考えられる解決策は、クラスとその関数をメインと同じファイルで宣言することです。

2つ目は、関数setvaluesを実際に実装/宣言しなかったことです。考えられる解決策は、クラス内にsetvaluesを実装するか、クラス外に実装することです。

3つ目は、名前空間内で関数とクラスを宣言しましたが、関数を修飾しませんでした。

例が必要な場合はお知らせください。

于 2012-04-13T23:07:50.203 に答える