C++ C+中模板类的类型转换问题+;
我不是一个模板或类型铸造专家,所以我真的需要一些帮助。 我不得不使用现有的模板类,并遇到以下类型转换问题。 我放了一些示例代码来说明这个问题C++ C+中模板类的类型转换问题+;,c++,templates,casting,operator-overloading,type-conversion,C++,Templates,Casting,Operator Overloading,Type Conversion,我不是一个模板或类型铸造专家,所以我真的需要一些帮助。 我不得不使用现有的模板类,并遇到以下类型转换问题。 我放了一些示例代码来说明这个问题 //template class definition template <class IntType> class CUSTOMIZE_Int: public CUSTOMIZE_Type { public: operator const IntType() const; private: IntType m_in
//template class definition
template <class IntType>
class CUSTOMIZE_Int: public CUSTOMIZE_Type
{
public:
operator const IntType() const;
private:
IntType m_int;
}
template<class IntType>
CUSTOMIZE_Int<IntType>::operator const IntType() const
{
return m_int;
}
// the template class instantiation
typedef CUSTOMIZE_Int<WRAPPER_Int32> CUSTOMIZE_UnsignedInt;
并创建一个变量,并尝试进行转换以获取数据
class IntNum& i;
const WRAPPER_Int32 j = i;
出现以下编译错误:
error: cannot convert "IntNum" to "const WRAPPER_Int32" in initialization.
转换的正确方法是什么,或者我的代码有什么问题?谢谢你的评论 我猜您希望运算符IntType() 若要在此处执行操作,请将i指定给j:
const WRAPPER_Int32 j = i;
但是,这不是隐式转换,您必须明确地进行转换:
const WRAPPER_Int32 j = (WRAPPER_Int32) i;
希望这能有所帮助。当我修复琐碎的编译器错误时(缺少
;
等,从自定义类型中删除派生,提供包装器的定义\u Int32
,使I
实际引用了一些东西),使用-Wall-Werror-Wextra-ansi
编译GCC 4.1.2时不会出现问题。所以一定有什么事你没告诉我们!您编写的代码无法编译,因为您不能有未初始化的引用。你的实际代码是什么样子的?嗨,马克,谢谢你的评论。只是一个快速的反馈,我怀疑“I”已经初始化,否则,它不应该是另一种类型的错误(我发现的未初始化引用,等等)?好吧,我也会从这方面调查的,伙计们,非常感谢你们的评论。有一个头文件我忘了包括在内。奥利和马克,我对你的评论都很满意。
const WRAPPER_Int32 j = i;
const WRAPPER_Int32 j = (WRAPPER_Int32) i;