繁体   English   中英

C ++ / Eclipse未定义参考问题

[英]C++ / Eclipse undefined reference question

我在Eclipse / C ++中遇到明显的链接器错误(“未定义的引用”)时遇到了麻烦。 除了一个PlayGame.cpp,它给出了“未定义的引用”错误(下面也显示),下面显示的所有类都可以正常编译。

以下是相关的类和代码段。

PlayerFactory.h

PlayerFactory.cpp

Game.h

Game.cpp

// constructor for game:

Game::Game (const PlayerFactory& factory)

{

       cout << " constructor" << endl;

}

PlayGame.cpp

// start of code for game where error occurs

#include "Game.h"

#include "PlayerFactory.h"

int main() {
   try

   {

      PlayerFactory factory;

      Game game (factory);  <== undefined reference error
      ...

上面的行给出了错误“对Game(PlayerFactory const&)的未定义引用”

是什么导致此错误,如何纠正?

class声明的默认可见性为private。 因此, PlayerPlayerFactory类的所有成员函数都是private -客户端无法访问。 您需要将其公开。

Player.h

#ifndef PLAYER_H 
#define PLAYER_H
class Player  
{  
public:
   virtual ~Player() {  
       cout << "Player destructor called" << endl;  

   }  
   virtual void Player::PlayerMakeMove(){  
       cout << "make move" << endl;  
   }  


};  
#endif // PLAYER_H

PlayerFactory.h

#ifndef PLAYERFACTORY_H
#define PLAYERFACTORY_H
class PlayerFactory  
{  
public:
   virtual ~PlayerFactory() {  
       cout << "PlayerFactory destructor called" << endl;  
   }  

   virtual std::auto_ptr<Player> PlayerFactory::MakePlayerX() const{  

       return PlayerFactory::MakePlayer('x');  
   }  

   virtual std::auto_ptr<Player> PlayerFactory::MakePlayerO() const{  
       return PlayerFactory::MakePlayer('o');  

   }  

   std::auto_ptr<Player> PlayerFactory::MakePlayer (char letter) const{  
       auto_ptr<Player> pt( new Player() );  
       return pt;  
   }  
};
#endif // PLAYERFACTORY_H

另外, Game::Play()缺少return语句。

Outcome Game::Play() {  
  cout << " play" << endl;  
  return PlayerXWon;
}

确实添加所需的标头,转发声明并根据需要using语句(我在这里跳过它们)。

嗯,无论出于什么原因,链接器都找不到构造函数的实现,这强烈表明它没有被编译。

几个调试步骤:

  • 尝试查找由gcc生成的.obj文件。 看看是否可以在其中找到Game.obj。

  • 找到一种方法来使IDE输出为gcc生成的命令行

  • 如果没有简单的方法,总会有:

    • 创建一个脚本,将其替换为gcc,然后使该脚本将命令行写入文件中并进行检查。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM