2012-04-13 111 views
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)); } 
} 
} 
+5

你在哪里定义'set_values'的实现? – 2012-04-13 22:51:12

+0

我正在学习一些以这种方式使用set_values函数的示例代码,所以我假设它是如何工作的。不过,我想这不是。哈哈。 – user1332364 2012-04-13 22:54:17

回答

3

嗯,有几个失误在这里,但关于你的问题,这里的SET_VALUE应如何实现:

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

请参阅此链接:Constructor and destructors

另外,好的做法,它始终是一个好主意,通过以下划线结尾来命名您的类成员变量

playerNum_ 
playerPos_ 
playerRank_ 

希望它有帮助!

4

你在你的班级中宣称为set_values,但从来没有像你对其他人一样为它提供一个机构。当你调用函数时,没有什么可执行的!

0

无法找到函数的几种不同的可能原因。

一,你在另一个C++文件中声明该类,这意味着当前的C++文件在你声明为main的文件中找不到它。这个问题的可能的解决方案是或者在与main相同的文件中声明类和它的函数。

二,你没有实际实现/声明函数setvalues。可能的解决方案是在类内部实现setvalues或者在类之外实现它。

三,你声明函数和类在一个命名空间内,但你没有限定该函数。

让我知道你是否需要例子。