C ++错误C2248:无法访问SUPER类中声明的私有成员

时间:2016-07-28 09:26:49

标签: c++ inheritance subclass superclass

我查看了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的子类使用相同的结构,但是那个工作正常。那么哪里出错了?

2 个答案:

答案 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的对象时,它首先被调用,这是无法访问的,这就是为什么会发生错误。