我刚刚开始用SFML 2.0编写一个简单的游戏。

我创建了AABB类,它继承了SFML的两个类,以编写类draw()方法。
但是我总是得到这个错误:

\main.cpp|14|error: cannot declare variable 'block'  to    be of abstract type 'AABB'|


码:

#include <SFML/Graphics.hpp>
#include <vector>
#include <iostream>
#include "headers/system.h"
#include "headers/AABB.h"

using namespace std;

int main()
{

sf::RectangleShape shape(sf::Vector2f(50,50));

AABB block (shape);

System sys;

if(!sys.create())
{
    cout << "Critical error! Did you modified ini files?";
    return EXIT_FAILURE;
}

sf::RenderWindow * WindowApp = sys.getHandle();

while (WindowApp->isOpen())
{


    sf::Event event;
    while (WindowApp->pollEvent(event))
    {
        if (event.type == sf::Event::Closed)
            WindowApp->close();
        if(event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape)
            WindowApp->close();
    }

    WindowApp->draw(block);
    WindowApp->clear();
    WindowApp->display();

}

return EXIT_SUCCESS;
}


AABB.h:

#include <SFML\Graphics.hpp>
#include <SFML\System.hpp>
#include <SFML\Audio.hpp>
#include <SFML\Network.hpp>

using namespace std;


class AABB : public sf::Drawable, public sf::Transformable
{

public:
    AABB(sf::Vector2f pos, sf::Vector2f size) :
        m_pos(pos),
        m_size(size) {}

    AABB(sf::RectangleShape shape) :
       m_sprite(shape)
        {}

private:
    virtual void draw(sf::RenderTarget& target) const ;

private:

    sf::Vector2f m_size;
    sf::Vector2f m_pos;
    sf::RectangleShape m_sprite;
};


AABB.cpp

#include "../headers/AABB.h"

using namespace std;

void AABB::draw(sf::RenderTarget& target) const
{

    target.draw(m_sprite);

}


我认为系统类在这里并不重要:D
顺便说一句,当我从类应用程序编译中删除继承而没有错误时。我该怎么办?请帮我 :)

最佳答案

您的类AABB继承了作为抽象类的sf::Drawable,并且AABB不会覆盖它的所有纯虚函数-这对于使AABB成为具体的类并具有其对象是必要的。我怀疑这是拼写错误的结果。你在哪里写

virtual void draw(sf::RenderTarget& target) const ;


AABB.h中,应该是

virtual void draw(sf::RenderTarget& target, sf::RenderStates) const ;


因为后者是sf::Drawable的纯虚函数的签名,如SFML documentation中所述。您自然也必须在AABB.cpp中更改此函数的定义。

关于c++ - C++错误:无法声明变量“block”为抽象类型“AABB”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28011673/

10-11 21:51