0

我收到这个错误

错误 C2440:“=”:无法从“const BWAPI::UnitType *”转换为“BWAPI::Type *”

在这条线上

this->generalType = &type;   

问题是什么?因为 UnitType extends 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 UnitType&。这提高了性能。或者,当然,如果您通过引用传递,也删除违规行中的地址运算符。

于 2012-08-22T08:07:23.480 回答
1

首先,您将 const 对象的地址分配给指向非 const 对象的指针。

其次,即使在您更正之后,this->generalType = &type也会存储在退出函数时被破坏的局部函数参数的地址。这是一件非常危险的事情。指针倾斜后会指向一个垃圾setUnitType

于 2012-08-22T08:08:32.287 回答