SFML未定义引用`Bat :: Bat(float,float)'

问题描述 投票:-1回答:1

我一直在努力教自己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

有人可以指出我正确的方向或可能告诉我我做错了什么?我真的很感激。

谢谢。

c++ undefined sfml
1个回答
0
投票

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

如果你检查它仍然找不到原因,也可以在这里发布你的cpp文件。

© www.soinside.com 2019 - 2024. All rights reserved.