c ++多态 - 访问继承的变量

时间:2012-06-08 13:14:33

标签: c++ polymorphism

玩家系统和火箭系统继承自系统,玩家系统包含指向火箭系统的指针。当我试图访问系统中任何火箭系统应该继承的东西时,我得到一个错误。运行时错误是“表达式无法评估”我在visual studio中设置了一个断点,将鼠标悬停在位置向量上,然后就说了。

编辑:对于后人这是我正在做的事情,事实证明它正在工作,我只是因为某些原因将rocketsystem指针设置为null

class Vector2D
{
    public:
    float x;
    float y;
    Vector2D(float x_, float y_) :x(x_),y(y_){}
};

class System
{
protected:

    vector<Vector2D> position;

public:

    void addEntity(Vector2D newPos)
    {
        position.push_back(newPos);
    }
};

class projectile :public System
{
public:
    void createRocket(Vector2D pos)
    {
        addEntity(pos);
    }    
};

class player : public System
{
public:
    projectile* rocketSystem;
    void init(projectile* rocketsys){rocketSystem = rocketsys;}
    void fireRocket(Vector2D pos)
    { 
        rocketSystem->createRocket(pos);
    }
};



int main (int argc, char * const argv[]) 
{
    player* PlayerSystem = new player;
    projectile* RocketSystem = new  projectile;

    PlayerSystem->init(RocketSystem);
    PlayerSystem->fireRocket(Vector2D(0,0));
    return 0;
}

1 个答案:

答案 0 :(得分:1)

我将使用我的心灵力量并猜测System类没有createRocket()成员。由于player系统具有System *rocketSystem而不是rocketsystem *rocketSystem,因此可以在rocketSystem成员上调用的唯一函数是在System类中声明的函数。如果您希望能够调用该函数,则它必须是rocketsystem*,并且必须在定义playersystem::fireRocket函数之前声明rocketsystem类。