2012-08-22 59 views
0

即時得到這個錯誤錯誤C2440: '=':不能從 '常量BWAPI :: UNITTYPE *' 轉換爲 'BWAPI ::類型*'

錯誤C2440: '=':不能從「常量BWAPI轉換:: UNITTYPE *」到 'BWAPI ::類型*'

在該行

this->generalType = &type; 

是什麼問題?由於UnitType的擴展類型不應該被允許?

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; 
} 
+1

它在CONST。 8 - )另外,你似乎在存儲一個指向臨時變量的指針,你確定要這樣做嗎? –

回答

1

刪除const。這應該工作。但是,你正在傳遞價值。您可以改爲通過const UnitType&。這提高了性能。或者當然,如果您通過引用傳遞,也可以刪除違規行中的地址 - 操作符。

1

首先,你將一個const對象的地址賦給一個指向非const對象的指針。

其次,即使在更正之後,this->generalType = &type也會存儲本地函數參數的地址,該參數在退出函數時會被破壞。這是一件非常危險的事情。指針在傾斜setUnitType後指向垃圾。

相關問題