错误:使用模板时从"const ..."到"..."错误消息的转换无效
error: invalid conversion from "const ..." to "..." error message when using templates
所以我想弄清楚C++模板是如何工作的,但运气不太好。我创建了以下模板:
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]
有人能告诉我为什么会发生这种事吗?
谢谢。
成员_valueType被声明为指向非常量对象(valueType*)的指针,而您试图用(&valueType)初始化的指针是指向常量对象(const valueType*,因为您引用了常量引用)的指针。
您的构造获取一个const
并尝试将其存储在一个无const
变量中。从该行中删除const
或将其添加到vars声明中。
const ValueType* _valueType;
您正试图将常量指针分配给非常量指针。
将行更改为:
const ValueType* _valueType;
我真的不理解ValueType,它存在吗?但我认为你想做这样的事情:
template<class TValue>
class Value {
public:
typedef TValue ValueType;
virtual ~Value();
inline TValue value() const { return _value; }
virtual int serialize(unsigned char* buffer, int bufferSize) const = 0;
protected:
Value(TValue value) : _value(value) {}
private:
TValue _value;
};
template<class TValue>
class NumericValue : public Value<TValue> {
public:
typedef typename Value<TValue>::ValueType ValueType;
protected:
NumericValue(TValue value) : Value<TValue>(value) {}
};
class U16Value : public NumericValue<u16> {
public:
U16Value(ValueType value) : NumericValue<ValueType>(value) {}
};
我通过简单地让每个派生类返回它们自己的ValueType对象而不是将其填充到父类中来解决这个问题。这似乎给了我想要的东西。
相关文章:
- 在运算符重载定义中使用成员函数(const错误)
- 在函数中使用 const int size 参数创建数组会在 Visual Studio 中抛出错误 C++:表达式的计
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 类型为 "Bucket&"(未限定的 const 限定)的引用不能使用 "SortedList." 类型的值进行初始化 如何修复此错误?
- 在gcc中意外调用了Const重载.编译器错误或兼容性修复程序
- 在其他容器中使用 boost::container::static_vector 时,GCC 编译错误"将'const s'绑定到类型's&'的引用丢弃限定符"
- 为什么我的编译器在调用 const getter 函数时抛出"转换丢失(const)限定符"错误?
- C++ 错误:由于 swprintf 而从 'int' 到 'const wchar_t* 的转换无效
- test1.cpp:9:77:错误:对"(const std::normal_distribution) <double>(std::mt19937&)"的调用不匹配
- 错误:对类型 'const ItemInstance' 的引用无法绑定到类型 'void' 的右值
- 错误:从'void*'到'const uint8_t* {aka const unsigned char*}'的转换无效 [-允许]
- C++ Boost - 序列化错误 - 将"const B"作为"this"参数
- 错误:从 'char' 到 'const char' [-允许] strcat(加密,密钥[i])的转换无效;
- 索引 2D 向量时'Reference to type const..'编译错误
- 编译器在传递 const 变量时返回错误:模板参数不是常量表达式
- 'note: 候選人: Volume& Volume::operator=(const Volume&)'.这个错误是什么?
- 错误:二进制">>":未找到采用类型为"const char [1] 的右操作数的运算符
- 类型"const char[2]"的值不能隐式转换为"int"错误C++
- 错误:“ const char*”类型的操作数和“ const char [7]”类型为二进制“操作员 ”
- 错误:' const '之前预期的未限定id