0

このエラーが発生しています

エラー C2440: '=': 'const BWAPI::UnitType *' から 'BWAPI::Type *' に変換できません

この行で

this->generalType = &type;   

何が問題ですか?UnitType は Type を拡張するため、許可されるべきではありませんか?

class CombatEvent {

public:

    CombatEvent& setType(CombatEventType type);
    Type* getGeneralType() const;

private:
    UnitType unitType;
    Type* generalType;
}

// implementation

CombatEvent& CombatEvent::setUnitType(const UnitType type) {

    this->generalType = &type;
    this->unitType = type;

    return *this;
 }
4

2 に答える 2

1

まず、constオブジェクトのアドレスを非constオブジェクトへのポインタに割り当てます。

次に、それを修正した後でもthis->generalType = &type、関数の終了時に破棄されるローカル関数パラメーターのアドレスを格納します。それは非常に危険なことです。ポインタは、傾いた後のゴミを指しますsetUnitType

于 2012-08-22T08:08:32.287 に答える
1

を取り外しますconst。これはうまくいくはずです。ただし、値渡しです。代わりに通り過ぎることができますconst UnitType&。これにより、パフォーマンスが向上します。またはもちろん、参照渡しの場合は、問題のある行のアドレス演算子も削除してください。

于 2012-08-22T08:07:23.480 に答える