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

时间:2012-08-22 08:05:03

标签: c++ inheritance syntax-error

我收到此错误

错误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;
 }

2 个答案:

答案 0 :(得分:1)

删除const。这应该工作。但是,你正在经历价值。您可以改为const UnitType&。这提高了性能。或者,如果您通过引用传递,也可以删除违规行中的address-of运算符。

答案 1 :(得分:1)

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

其次,即使你纠正了这一点,this->generalType = &type也会存储一个本地函数参数的地址,该参数在退出函数时被销毁。这是一件非常危险的事情。倾斜setUnitType后,指针指向垃圾。