2016-07-03 5 views
0

Die typedef-Deklaration ist nicht erlaubt (SAPPLICATION_POOL_HEADER wurde nicht deklariert ....) Warum?Linkliste der Struktur deklarieren, die die Vorlage enthält

template <class T> 
typedef struct _sApplicationPoolHeader 
{ 
    SAPPLICATION_POOL_LIST sApplicationList; 
    T oData; 
}SAPPLICATION_POOL_HEADER, 
    *PSAPPLICATION_POOL_HEADER; 

template <class T> 
typedef LinkedListTemplate<SAPPLICATION_POOL_HEADER> LinkList; 

edit: Die Definition von SAPPLICATION_POOL_LIST:

typedef struct _sApplicationPoolList 
{ 
    struct _sApplicationPoolList* psPrevApplication; 
    struct _sApplicationPoolList* psNextApplication; 
}SAPPLICATION_POOL_LIST, 
    *PSAPPLICATION_POOL_LIST, 
     **PPSAPPLICATION_POOL_LIST; 
+0

Es scheint, wie einige Teile sind In Ihrem Beispiel fehlen die Definitionen von SAPPLICATION_POOL_LIST und LinkedListTemplate. –

+0

@DanRoche siehe bearbeiten –

Antwort

2

typedef nicht Templat werden kann. Angenommen, Sie haben (mindestens) C++ 11, können Sie einen Typ-Alias ​​ mit dem Schlüsselwort using verwenden, um dies zu tun.

template <class T> 
struct sApplicationPoolHeader 
{ 
    SAPPLICATION_POOL_LIST sApplicationList; 
    T oData; 
}; 

template <typename T> 
using LinkList = sApplicationPoolHeader<T>; 

In Original enthalten Sie Namen für SAPPLICATION_POOL_HEADER und PSAPPLICATION_POOL_HEADER auch. Dies ist im Allgemeinen nicht notwendig in C++ (dies war ein gemeinsames Idiom in C, da ohne typedef ein struct benötigt, um in der Art enthalten sein), aber wenn man diese auch will,

// Pure alias of SAPPLICATION_POOL_HEADER for sApplicationPoolHeader 
template <typename T> 
using SAPPLICATION_POOL_HEADER = sApplicationPoolHeader<T>; 

// Alias of PSAPPLICATION_POOL_HEADER for pointer to sApplicationPoolHeader 
template <typename T> 
using PSAPPLCIATION_POOL_HEADER = sApplicationPoolHeader<T> *; 
Verwandte Themen