-1

playersystemとrocketsystemはsystemから継承し、playersystemには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;
}
4

1 に答える 1

1

私は自分の超能力を使って、SystemクラスにcreateRocket()メンバーがいないと推測します。playersystemにはがありSystem *rocketSystem、がないためrocketsystem *rocketSystem、メンバーで呼び出すことができる関数rocketSystemは、Systemクラスで宣言された関数のみです。rocketsystem*その関数を呼び出せるようにする場合はaである必要があり、playersystem::fireRocket関数を定義する前にロケットシステムクラスを宣言する必要があります。

于 2012-06-08T13:32:13.597 に答える