Soy nuevo en C++, así que tengan paciencia conmigo. Tengo una clase genérica llamada A. A tiene una clase anidada llamada B. A contiene un método llamado getB(), que se supone que devuelve una nueva instancia de B. Sin embargo, no puedo obtener mi código para compilar. Esto es lo que parece: # includeDevuelve el puntero a la clase interna anidada de la clase externa genérica
Ah
template <class E>
class A {
public:
class B {
public:
int data;
};
B * getB();
};
a.cpp
#include "A.h"
template <class E>
A<E>::B * A::getB() {
return new B();
}
Cuando intento compilar esto, me sale el siguiente error:
error: expected constructor, destructor, or type conversion before '*' token
¿Alguien sabe lo que estoy haciendo mal?
Gracias,
helixed
ACTUALIZACIÓN:
Gracias por las respuestas a todos rápida. Todavía estoy teniendo un pequeño problema para que esto funcione. Después de tomar los consejos que se muestran aquí, tengo algo como esto:
A.h
template <class E>
class A {
public:
class B {
public:
int data;
};
B * getB();
};
template <class E>
typename A<E>::B * A<E>::getB() {
return new B();
}
class C {
};
Sin embargo, cuando trato de utilizar este de la principal, me sale un error. Aquí está mi principal método:
main.cpp
#include "A.h"
int main(int argc, char *argv[])
{
A<C> *a = new A<C>();
A<C>::B *b = a.getB();
}
Cuando intento compilar esto, me sale el siguiente error:
error: request for member 'getB' in 'a', which is of non-class type 'A<C>*'
Gracias de nuevo por las respuestas rápidas.
helixed
hmm, trabaja en Comeau .Pero incluso si esto se compilara, ¿sería útil? La definición de getB solo estaría disponible en A.cpp. Como se trata de una plantilla, no puede ser llamada desde ninguna otra unidad de traducción a menos que el compilador admita "exportar". –
Respuesta a editar: use '->' para acceder a los miembros a través del puntero. –
Oh, duh, me siento realmente estúpido ahora. He pasado demasiado tiempo en Java. Gracias por la ayuda Steve. – LandonSchropp