2012-08-15 126 views
8

试图typedef我的内存对齐我出来了以下构造(仍然有点工作正在进行中,因为我需要更正GNU版本):模板错误:非类型“.. [与T = T]不是类型名称”

#if defined(__GNUG__) 
template <typename T> 
struct sfo_type { 
    typedef T* restrict __attribute__((aligned(32))) aptr32; 
}; 

#elif defined(__INTEL_COMPILER) 
template <typename T> 
struct sfo_type { 
    typedef T* restrict __attribute__((aligned(32))) aptr32; 
}; 
#endif 

,然后我尝试使用这样的:

template<typename T> 
class tsfo_vector { 
private: 
    sfo_type<T>::aptr32 m_data; 
    int     m_size; 
... 

但后来我得到了以下错误消息:

/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; 
^ 

任何人都可以建议这里有什么问题吗?

回答

10

aptr32取决于T这样:

template<typename T> 
    class tsfo_vector { 
    private: 
     typename sfo_type<T>::aptr32 m_data; 
     //^^^^^^^^ 

有关使用typename进一步解释见Where and why do I have to put the "template" and "typename" keywords?

+0

好的,谢谢!实际上,我对这个问题感到困惑......数据成员如何在前面编译一个typedef标记?这是一个奇怪的事情。 – 2012-08-15 12:45:48

+0

@GiovanniAzua,相关的答案比我更好地解释了'typename'的使用。 – hmjd 2012-08-15 12:49:59

+0

@GiovanniAzua:不是数据成员,但它的类型前缀为'typedef'。 – celtschk 2012-08-15 12:53:13

相关问题