¿Qué pasa con lo siguiente?typedef a tipo de plantilla
typedef boost::shared_ptr SharedPtr;
GCC da el siguiente error:
ISO C++ forbids declaration of ‘shared_ptr’ with no type
¿Qué pasa con lo siguiente?typedef a tipo de plantilla
typedef boost::shared_ptr SharedPtr;
GCC da el siguiente error:
ISO C++ forbids declaration of ‘shared_ptr’ with no type
C++ no (todavía) no tiene "typedefs plantilla" donde se puede "cambiar el nombre de" una plantilla como esta. Esta es una característica que se agrega en C++ 0x, donde tal "typedef" se llama una "plantilla de alias".
La solución más simple que funciona en la actualidad es el uso de una plantilla de clase con un typedef anidada:
template <typename T>
struct SharedPtr
{
typedef std::shared_ptr<T> Type;
};
// usage
typename SharedPtr<int>::Type sp;
¿Puede explicar por qué no es válido en C++ actual? Parece un poco molesto que no lo sea, y sugiere un comportamiento obvio. –
@Matt: Simplemente no es una característica del lenguaje en C++ 98/C++ 03. Estoy de acuerdo en que es molesto: C++ tiene muchas molestias y afortunadamente muchas de ellas han sido rectificadas en C++ 0x. –
La razón es que shared_ptr no es un tipo, sino una ** plantilla ** para un tipo. Por otro lado, 'shared_ptr
¿Qué está tratando de lograr? –
Mi error, typename no debería estar ahí, pero ninguna de las respuestas existentes se ve afectada por esto. –
¿Ese código no es válido? ¡Nunca lo supe! +1 – Mehrdad