我查看了stackoverflow中的类似问题,但还没有找到答案。
这是我的子类声明:
class Enemy : public Entity
{
public:
Enemy();
~Enemy();
}; // This is the line that shows the error...
这是我的超类声明:
class Entity
{
//Member Methods:
public:
Entity();
~Entity();
bool Initialise(Sprite* sprite);
void Process(float deltaTime);
void Draw(BackBuffer& backBuffer);
void SetDead(bool dead);
bool IsDead() const;
bool IsCollidingWith(Entity& e);
float GetPositionX();
float GetPositionY();
float GetHorizontalVelocity();
void SetHorizontalVelocity(float x);
float GetVerticalVelocity();
void SetVerticalVelocity(float y);
protected:
private:
Entity(const Entity& entity);
Entity& operator=(const Entity& entity);
//Member Data:
public:
protected:
Sprite* m_pSprite;
float m_x;
float m_y;
float m_velocityX;
float m_velocityY;
bool m_dead;
private:
};
我已经有一个名为playership的子类使用相同的结构,但是那个工作正常。那么哪里出错了?
答案 0 :(得分:2)
private:
Entity(const Entity& entity);
Entity& operator=(const Entity& entity);
您使Entity类无法复制且无法复制。但是你的敌人类没有声明这些成员函数。因此编译器会为您强制并生成它们。到目前为止没问题,但我假设你试图复制一个敌人......
获取类似错误的最小示例:
class Entity
{
//Member Methods:
public:
Entity();
~Entity();
private:
Entity(const Entity& entity);
Entity& operator=(const Entity& entity);
};
class Enemy : public Entity
{
public:
Enemy(){}
~Enemy(){}
};
int main()
{
Enemy e1, e2 = e1;
return 0;
}
答案 1 :(得分:2)
通常你不能访问超类entity
的私有函数或构造函数,当你使用类的对象时,首先调用超类的构造函数,然后调用子类的构造函数。
这里你的超类的构造函数声明为private.So,当你使用子类enemy
时,调用超类entity
的第一个构造函数,然后调用子类enemy
的构造函数。
在你的代码中,超类entity
的构造函数是私有的,当你使用子类enemy
的对象时,它首先被调用,这是无法访问的,这就是为什么会发生错误。