2014-04-20 2 views
1

내 sfml 게임에 대한 Entity 클래스를 만들고 있는데 왜 다음 코드를 컴파일 할 수 없는지 이해할 수 없습니다. undefined reference to vtable in Entity 오류가 발생합니다.vtable (C++)에 대한 정의되지 않은 참조

다음은 헤더 파일입니다

#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 = 0; 
    virtual float getRadius() const = 0; 

참고 : 당신이 당신의 Entity 클래스는 다음을 구현하지 않으려면

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

는, 그 가상 순수을 선언

답변

4

당신은 몇 가지 가상 메소드의 구현을 누락 @JoachimIsaksson이 주석을 달았으므로 소멸자가 순수 가상인지 여부는 완전히 분명하지 않습니다. 비어있는 구현체를 제공했지만 여전히이를 구현하려면 파생 된 유형이 필요합니다. 순수한 가상이 필요한지 고려해 볼 가치가 있습니다.

+0

고맙습니다. 그들은 순수 가상으로 선언되어야한다고 생각했습니다. 완전히 잊었습니다. – Veritas

+0

@Veritas 알았어, 그걸 대안으로 추가했다. – juanchopanza

+0

@Veritas'~ Entity()'도 순수 가상으로 선언되고 어쨌든 구현됩니다. –

관련 문제