c++ - 未定义的 vtable 引用 (C++)

标签 c++

<分区>

我正在为我的 sfml 游戏制作实体类,但我不明白为什么以下代码无法编译。我收到 undefined reference to vtable in Entity 错误。

这是头文件:

#ifndef ENTITY_H
#define ENTITY_H
#include <string>
#include <SFML/System/Vector2.hpp>
#include <SFML/Graphics/Rect.hpp>
#include <SFML/System/Time.hpp>

class Entity
{
public:
        Entity(std::string id, sf::Vector2f position, float rotation );
        virtual ~Entity() = 0;
        virtual sf::FloatRect getBoundingRect() const;
        virtual float getRadius() const;
        void UpdateVelocity(sf::Time);
        void UpdatePosition(sf::Time);
        void Update(sf::Time);
        float getRotation() const;
        sf::Vector2f getPosition() const;
        sf::Vector2f getVelocity() const;
        sf::Vector2f getAcceleration() const;


private:
        std::string mId;
        sf::Vector2f mPosition;
        float mRotation;
        sf::Vector2f mVelocity;
        sf::Vector2f mAcceleration;
};

#endif // ENTITY_H

这是cpp文件:

#include "../include/Entity.h"

Entity::Entity(std::string id, sf::Vector2f position, float rotation)
        : mId(id)
        , mPosition(position)
        , mRotation(rotation)
{
}

Entity::~Entity()
{
}


void Entity::UpdateVelocity(sf::Time dt)
{
        mVelocity += mAcceleration;
}

void Entity::UpdatePosition(sf::Time dt)
{
        mPosition += mVelocity;
}

void Entity::Update(sf::Time dt)
{
        UpdateVelocity(dt);
        UpdatePosition(dt);
}

float Entity::getRotation() const
{
        return mRotation;
}

sf::Vector2f Entity::getPosition() const
{
        return mPosition;
}

sf::Vector2f Entity::getVelocity() const
{
        return mVelocity;
}

sf::Vector2f Entity::getAcceleration() const
{
        return mAcceleration;
}

非常感谢任何帮助!

最佳答案

您缺少一些虚方法的实现:

    virtual sf::FloatRect getBoundingRect() const;
    virtual float getRadius() const;

如果您不希望您的 Entity 类实现这些,请将它们声明为纯虚拟:

    virtual sf::FloatRect getBoundingRect() const = 0;
    virtual float getRadius() const = 0;

请注意,正如@JoachimIsaksson 评论的那样,您是否需要析构函数是纯虚拟的并不完全明显。您已经为它提供了一个空的实现,但您仍然需要派生类型来实现它。可能值得考虑您是否需要它是纯虚拟的。

关于c++ - 未定义的 vtable 引用 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23181462/

相关文章:

C++ 和 DLL 未在此范围内声明

c++ - 将 const 成员函数转换为非常量

c++ - 将 `auto` 关键字与 STL 迭代器一起使用

c++ - 为什么即使在 'ss.fail()' 为真(这里 'ss' 是一个 stringstream 对象)之后循环也不终止?

c# - 如何从图像中访问检测到的人脸中的人脸像素?

c++ - 在 C++ 中计算产生零

c++ - 没有 dsym 的 iOS 崩溃报告符号化 - 在二进制文件中看到的地址之外的符号地址

C++:FFMPEG 和 SDL 资源

c++ - 从 XML 中提取特定数字属性的有效方法

c++ - 随机生成的排序数组 : search performances comparison