C++ 模板错误:非类型";。。[with T=T]不是类型名称;
在尝试键入定义内存对齐方式时,我提出了以下构造(由于需要更正GNU版本,因此仍有一些工作在进行中):C++ 模板错误:非类型";。。[with T=T]不是类型名称;,c++,templates,compiler-errors,cross-compiling,C++,Templates,Compiler Errors,Cross Compiling,在尝试键入定义内存对齐方式时,我提出了以下构造(由于需要更正GNU版本,因此仍有一些工作在进行中): #如果已定义(uu GNUG_uu) 模板 结构sfo_类型{ typedef T*restrict uuu属性uuu((对齐(32)))aptr32; }; #已定义的elif(_英特尔编译器) 模板 结构sfo_类型{ typedef T*restrict uuu属性uuu((对齐(32)))aptr32; }; #恩迪夫 然后我试着这样使用它: template<typename
#如果已定义(uu GNUG_uu)
模板
结构sfo_类型{
typedef T*restrict uuu属性uuu((对齐(32)))aptr32;
};
#已定义的elif(_英特尔编译器)
模板
结构sfo_类型{
typedef T*restrict uuu属性uuu((对齐(32)))aptr32;
};
#恩迪夫
然后我试着这样使用它:
template<typename T>
class tsfo_vector {
private:
sfo_type<T>::aptr32 m_data;
int m_size;
...
模板
类tsfo_向量{
私人:
sfo_类型::aptr32 m_数据;
国际货币单位大小;
...
但随后我收到以下错误消息:
/Users/bravegag/code/fastcode_project/code/src/sfo_vector.h(43): error: nontype "sfo_type<T>::aptr32 [with T=T]" is not a type name
sfo_type<T>::aptr32 m_data;
^
/Users/bravegag/code/fastcode\u project/code/src/sfo\u vector.h(43):错误:非类型“sfo\u type::aptr32[with T=T]”不是类型名称
sfo_类型::aptr32 m_数据;
^
有人能告诉我这里出了什么问题吗?
aptr32
依赖于T
,因此:
template<typename T>
class tsfo_vector {
private:
typename sfo_type<T>::aptr32 m_data;
//^^^^^^^^
模板
类tsfo_向量{
私人:
类型名称sfo_类型::aptr32 m_数据;
//^^^^^^^^
关于
typename
用法的进一步解释,请参见Nice,谢谢!事实上,我对此感到困惑…为什么数据成员必须在前面有一个typedef标记才能编译?这有点奇怪。@GiovanniAzua,链接的答案解释了typename
的用法,比我能解释的好得多。@GiovanniAzua:不是e数据成员,但其类型的前缀是typedef
。简单的回答是,即使编译器可能有您对sfo_类型的定义,也可能在您使用它的地方有一个明确的专门化(如sfo_类型);不要求专门化具有与常规模板相同的成员,因此您必须告诉编译器“此名称必须是类型的名称”。这就是typename
所做的。
template<typename T>
class tsfo_vector {
private:
typename sfo_type<T>::aptr32 m_data;
//^^^^^^^^