我一直在努力教自己SFML。最近我一直在关注这个教程:http://gamecodeschool.com/sfml/building-a-simple-game-engine-in-c-plus-plus/来构建一个小乒乓球游戏。第一次尝试我读完所有内容并跟随代码,并不断收到Bat和Ball的错误,例如:
main.cxx:(.text+0x11e): undefined reference to `Bat::Bat(float, float)'
我回过头来尝试修复问题,并排比较代码,甚至重写每个文件。但是,我仍然遇到同样的错误:
main.cxx:(.text+0x11e): undefined reference to `Bat::Bat(float, float)'
main.cxx:(.text+0x11e): undefined reference to `Bat::Bat(float, float)'
main.cxx:(.text+0x279): undefined reference to `Bat::moveLeft()'
等
我理解未定义的引用意味着链接器在查看所有目标文件和库时无法找到定义。但是,我有一段时间没有使用过C ++,老实说我似乎无法找到我错的地方?
我当前的环境是Debian 9上的Geany IDE。所有头文件和实现文件都在同一个文件夹中。代码与上面发布的链接中的教程完全一样。例如,这是我的Bat.h文件:
ifndef BAT_H
#define BAT_H
#include <SFML/Graphics.hpp>
using namespace sf;
class Bat
{
private:
Vector2f position;
// A RectangleShape object
RectangleShape batShape;
float batSpeed = .3f;
public:
Bat(float startX, float startY);
FloatRect getPosition();
RectangleShape getShape();
void moveLeft();
void moveRight();
void update();
};
#endif
有人能指出我正确的方向还是可能告诉我我做错了什么?我真的很感激。
感谢。
答案 0 :(得分:0)
链接器找不到您Bat
构造函数和moveLeft
方法的代码。最可能的原因是您没有在构建中包含Bat.cpp文件,或者您的cpp文件具有不同的签名,这些签名与头文件中的不同。
如果你检查它仍然找不到原因,也可以在这里发布你的cpp文件。