Jestem nowicjuszem w C++, więc weź ze mną. Mam klasę generyczną o nazwie A. A ma zagnieżdżoną klasę o nazwie B. A zawiera metodę o nazwie getB(), która ma zwrócić nową instancję B. Jednak nie mogę skompilować mojego kodu. Oto jak to wygląda: #includeZwróć wskaźnik do zagnieżdżonej klasy wewnętrznej z ogólnej klasy zewnętrznej
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();
}
Kiedy próbuję skompilować ten, pojawia się następujący błąd:
error: expected constructor, destructor, or type conversion before '*' token
Czy ktoś wie, co robię źle?
Dzięki,
helixed
UPDATE:
Dzięki za szybkie odpowiedzi każdego. Nadal mam trochę problemów z działaniem. Po zrobieniu sugestie wymienione tutaj, mam coś takiego:
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 {
};
Jednak, gdy staram się korzystać z tego głównego, otrzymuję komunikat o błędzie. Tu jest mój główny sposób:
main.cpp
#include "A.h"
int main(int argc, char *argv[])
{
A<C> *a = new A<C>();
A<C>::B *b = a.getB();
}
Kiedy próbuję skompilować ten, pojawia się następujący błąd: znowu
error: request for member 'getB' in 'a', which is of non-class type 'A<C>*'
Dzięki za szybkie odpowiedzi.
helixed
hmm, działa na Comeau .Ale nawet gdyby to skompilowało, pomogłoby? Definicja getB byłaby dostępna tylko w A.cpp. Ponieważ jest to szablon, nie można go było wywołać z innej jednostki tłumaczeniowej, chyba że twój kompilator obsługuje "eksport". –
Odpowiedź na edycję: użyj '->', aby uzyskać dostęp do członka za pomocą wskaźnika. –
Och, duh, teraz czuję się naprawdę głupio. Spędziłem za dużo czasu w Javie. Dzięki za pomoc Steve. – LandonSchropp