C++ SFML未定义对“Bat::Bat(浮动,浮动)';

C++ SFML未定义对“Bat::Bat(浮动,浮动)';,c++,undefined,sfml,C++,Undefined,Sfml,我一直在努力自学SFML。最近我一直在学习这个教程:构建一个小乒乓球游戏。第一次尝试时,我通读了所有内容,并按照代码进行操作,不断地在击球和击球时出错,例如: main.cxx:(.text+0x11e): undefined reference to `Bat::Bat(float, float)' 我回到过去,试着修复一些东西,并排比较代码,甚至重写每个文件。但是,我仍然会遇到同样的错误: main.cxx:(.text+0x11e): undefined reference to `Ba

我一直在努力自学SFML。最近我一直在学习这个教程:构建一个小乒乓球游戏。第一次尝试时,我通读了所有内容,并按照代码进行操作,不断地在击球和击球时出错,例如:

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++工作了,我真的找不到我出了什么问题了。 我当前的环境是Debian9上的GeanyIDE。所有头文件和实现文件都位于同一文件夹中。代码与上面链接中的教程中的代码完全相同。例如,下面是我的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
ifndef BAT_H
#定义BAT_H
#包括
使用名称空间sf;
蝙蝠级
{
私人:
矢量2f位置;
//长方形物体
矩形蝙蝠形;
浮球速度=.3f;
公众:
Bat(浮动星TX、浮动星TY);
FloatRect-getPosition();
矩形形状getShape();
void moveLeft();
void moveRight();
无效更新();
};
#恩迪夫
有没有人能给我指出正确的方向,或者告诉我我做错了什么?我会非常感激的


谢谢。

链接器无法为您找到
Bat
构造函数和
moveLeft
方法的代码。最可能的原因是您的Bat.cpp文件未包含在生成中,或者您的cpp文件对这些方法具有不同的签名,这与头文件中的签名不同


如果您检查后仍无法找到原因,请将您的cpp文件也张贴在此处。

我们可以看到声明。定义是什么?您是否也编译了相应的cpp文件(我猜是Bat.cxx?)并在生成可执行文件时链接它?可能cpp文件没有正确添加到项目中(或者IDE用于引用用于构建可执行文件的源文件集合的任何名称)?这些信息有点难说。(顺便说一句,第一行缺少一个#,但我假设它在原始文件中,否则肯定会有一个非常明显的错误)我编译了所有相应的cpp文件,没问题。只有当我尝试构建时,我才得到我所指的错误。您是否尝试编写自己的Makefile以确保没有忘记某些东西(而不是使用IDE)?诚然,这更乏味,但至少更容易看到问题发生的地方。或者,在终端中键入“g++[所有cpp文件]-lsfml系统-lsfml图形-lsfml窗口-L[sfml库所在位置的路径]-I[sfml头所在位置的路径]”是否有效?我认为它更多地与构建过程有关,而不是与源文件中的内容有关,但是如果不确切知道您拥有什么以及您做了什么,就很难判断。您的构建似乎缺少
Bat.o