我刚刚开始在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编译中删除继承而没有错误。我想做什么?请帮帮我:)。
答案 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
中更改此函数的定义。