C ++错误:无法声明变量'阻止'是抽象的' AABB'

时间:2015-01-18 15:54:47

标签: c++

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

我使用SFML中的继承两个类创建了类AABB,以便在类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 BTW当我从类app编译中删除继承而没有错误。我想做什么?请帮帮我:)。

1 个答案:

答案 0 :(得分:2)

您的班级AABB继承sf::Drawable,这是一个抽象类,而AABB不会覆盖它的所有纯虚函数 - 这对于{{1}来说是必要的一个具体的类,并拥有它的对象。我怀疑这是一个错字的结果。你写的地方

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

,应该是

AABB.h

因为后者是virtual void draw(sf::RenderTarget& target, sf::RenderStates) const ; 纯虚函数的签名,如SFML documentation中所述。您必须自然地在sf::Drawable中更改此函数的定义。