所以我想弄清楚C++模板是如何工作的,而且我沒有太多的運氣。我創建了以下模板:錯誤:使用模板時從「const ...」無效轉換爲「...」錯誤消息
template<class TValue>
class Value {
public:
virtual ~Value();
inline TValue value() const { return _value; }
virtual int serialize(unsigned char* buffer, int bufferSize) const = 0;
protected:
Value(TValue value, const ValueType& valueType) : _value(value), _valueType(&valueType) {}
private:
TValue _value;
ValueType* _valueType;
};
template<class TValue>
class NumericValue : public Value<TValue> {
protected:
NumericValue(TValue value, const ValueType& valueType) : Value<TValue>(value, valueType) {}
};
,然後我有我創建了一個類:
class U16Value : public NumericValue<u16> {
public:
U16Value(u16 value) : NumericValue<u16>(value, ValueType::U16) {}
}
不幸的是,這不會編譯。我就在這行錯誤:
Value(TValue value, const ValueType& valueType) : _value(value), _valueType(&valueType) {}
,上面寫着:
error: invalid conversion from const tnp::ValueType* to tnp::ValueType* [-fpermissive]
一些能告訴我,爲什麼發生這種情況?
謝謝。
不允許從'const T *'轉換爲'T *'。它會打破const修飾符,因爲你可能無意中通過指向非const的指針來改變const對象。 '_valueType'成員的目的是什麼? – jrok
_valueType定義對象的值的類型。數字對象提供轉換例程以轉換爲不同的數據類型並從中轉換。 – DaveR
也許我誤解了你的意圖,但是你不需要一個數據成員來記住一個模板參數:o除非你想保持運行時的信息。 – jrok