2012-08-15 7 views
8

Ich versuchte, meine Speicherausrichtung typedef kam ich mit dem folgenden Konstrukt (das ist immer noch ein bisschen Arbeit in Arbeit, weil ich korrigieren muss die GNU-Version):Vorlage Fehler: Untyp ".. [mit T = T] ist kein Typ Name"

#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 

und dann versuche ich es so zu verwenden:

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

aber dann bekomme ich folgende Fehlermeldung:

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

Kann mir jemand sagen, was hier nicht stimmt?

Antwort

10

aptr32 auf T so abhängig ist:

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

Zur weiteren Erläuterung über die Verwendung von typenameWhere and why do I have to put the "template" and "typename" keywords?

+0

Nizza sehen, danke! Ich bin wirklich verwirrt von diesem ... Wie kommt es, dass ein Datenelement einen typedef Marker zum Kompilieren haben muss? es ist ein bisschen komisch. –

+0

@GiovanniAzua, erklärt die Antwort die Verwendung von 'typename' viel besser, als ich könnte. – hmjd

+0

@GiovanniAzua: Nicht das Datenelement, aber sein Typ hat das Präfix 'typedef'. – celtschk

Verwandte Themen