2010-10-05 7 views
7

Tengo una clase algo así:Constructor para un no-nombrado estructura

template <class T> 
class bag 
{ 
public: 

private: 
typedef struct{void* prev; struct{T item; unsigned int count;} body; void* next;}* node; 
typedef struct{ 
    node operator->() { return current; } 
    operator(){;} // <- i can not do that, right? 

private: 
    node current; 
} iterator; 
//... 
}; 

Por lo tanto, la forma de escribir un constructor para la bolsa :: iterador?

+0

Una estructura "sin nombre" se llama anónima. –

+0

@ Peter G .: no anónimo, esta es una "clase sin nombre definida en una declaración typedef" '7.1.3/5' – Cubbi

+0

Gracias Cubbi, estoy corregido. –

Respuesta

6

hacer un poco de buen nombre para él :-)

typedef struct NoName1 {void* prev; NoName1(){}; struct NoName2{T item; unsigned int count; NoName2() {}} body; void* next;}* node; 

EDIT: LOL lo siento, lo escribió para la equivocada, pero el principio es el mismo :-)

5

No hay manera de escribir un constructor para bag::iterator porque iterador es un nombre typedef, que están prohibidos de ser utilizado como nombres constructor:

14882:2003 12.1/3

a typedef-name que nombra una clase no se debe utilizar como el identificador en el declarador de una declaración de constructor.

Incluso hay un ejemplo en la norma, si bien en un párrafo distinto, 7.1.3/5:

typedef struct { 
    S();   //error: requires a return type because S is 
       // an ordinary member function, not a constructor 
} S; 

Tendrá que dar esa estructura un nombre, si quieres un constructor definido por el usuario. El estilo de programación typedef struct { } name; suele ser desaconsejado por las guías de estilo C++ de todos modos, a favor de struct name { };.

Cuestiones relacionadas