Sono nuovo al C++, quindi abbi pazienza con me. Ho una classe generica chiamata A. A ha una classe nidificata chiamata B. A contiene un metodo chiamato getB(), che dovrebbe restituire una nuova istanza di B. Tuttavia, non riesco a compilare il mio codice. Ecco come si presenta: #includeRestituisce il puntatore alla classe interna annidata dalla classe esterna generica
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();
}
Quando provo a compilare questo, ottengo il seguente errore:
error: expected constructor, destructor, or type conversion before '*' token
Qualcuno sa cosa sto sbagliando?
Grazie,
helixed
UPDATE:
Grazie per le risposte veloci tutti. Sto ancora avendo qualche problema a farlo funzionare. Dopo aver preso i suggerimenti elencati qui, ho qualcosa di simile:
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 {
};
Tuttavia, quando provo ad usare questo dal principale, ottengo un errore. Ecco il mio metodo principale:
main.cpp
#include "A.h"
int main(int argc, char *argv[])
{
A<C> *a = new A<C>();
A<C>::B *b = a.getB();
}
Quando provo a compilare questo, ottengo il seguente errore:
error: request for member 'getB' in 'a', which is of non-class type 'A<C>*'
Grazie ancora per le risposte rapide.
helixed
Hmm, funziona su Comeau .Ma anche se fosse compilato, sarebbe d'aiuto? La definizione per getB sarebbe disponibile solo in A.cpp. Dato che si tratta di un modello, non è possibile chiamarlo da un'altra unità di traduzione a meno che il compilatore non supporti "esportazione". –
Risposta a modifica: usare '->' per l'accesso membro tramite puntatore. –
Oh, duh, mi sento davvero stupido ora. Ho passato troppo tempo in Java. Grazie per l'aiuto Steve. – LandonSchropp