[英]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。 因此, Player
和PlayerFactory
类的所有成员函数都是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生成的命令行
如果没有简单的方法,总会有:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.