2012-08-15 8 views
8

私のメモリアライメントをtypedefしようとしました。次のコンストラクトが出てきました。 GNUバージョン):テンプレートエラー:nontype ".. [T = T]はタイプ名ではありません"

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

が、その後、私は、次のエラーメッセージが出ます::

#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 

、その後、私はこのようにそれを使用しよう

/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マーカーを持っていなければなりませんか?それは奇妙なことのビットです。 –

+0

@ GiovanniAzua、リンクされた答えは、私ができるよりもはるかに優れた 'typename'の使用法を説明しています。 – hmjd

+0

@ GiovanniAzua:データメンバではありませんが、型に接頭辞 'typedef'があります。 – celtschk

関連する問題