-1

playersystem和rocketsystem继承自system,playersystem包含指向rocketsystem的指针。当我尝试访问 Rocketsystem 应该继承的系统中的任何内容时,我遇到了错误。运行时错误是“无法评估表达式”我在 Visual Studio 中设置了一个断点,将鼠标悬停在位置向量上,它说。

编辑:对于后代,这就是我正在做的事情,事实证明它正在工作,我只是出于某种原因将火箭系统指针设置为 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;
}
4

1 回答 1

1

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

于 2012-06-08T13:32:13.597 回答