저는 C++을 처음 사용했습니다. A라는 generic 클래스가 있습니다. A에는 B라는 중첩 클래스가 있습니다. A에는 getB()라는 메서드가 포함되어 있습니다.이 메서드는 B의 새 인스턴스를 반환해야합니다. 그러나 컴파일 할 코드를 가져올 수 없습니다. 여기에 보이는 무엇을 좋아합니다 : #include일반 외부 클래스의 중첩 된 내부 클래스에 대한 포인터를 반환하십시오.
아
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();
}
나는 이것을 컴파일하려고
, 나는 다음과 같은 오류 얻을 :error: expected constructor, destructor, or type conversion before '*' token
을 아무도 내가 뭘 잘못하고 있는지 알아? 빠른 응답 모두에 대한
감사 :
덕분에,
는UPDATE를 helixed. 나는 아직도이 일을하는 데 약간의 어려움을 겪고있다.
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 {
};
그러나
, 내가 주에서 이것을 사용하려고하면, 나는 오류가 발생
A.h : 여기에 나열된 제안을 복용 후, 나는 이런 식으로 뭔가가있다. 여기 내 주요 방법입니다 :이 컴파일 할 때MAIN.CPP
#include "A.h"
int main(int argc, char *argv[])
{
A<C> *a = new A<C>();
A<C>::B *b = a.getB();
}
, 나는 다음과 같은 오류 얻을 : 빠른 응답을 다시
error: request for member 'getB' in 'a', which is of non-class type 'A<C>*'
감사합니다.
는 컴파일러가 "B"는 "A"는 템플릿되는 유형인지 알 수있을만큼 똑똑하지 않다
흠을 꼬모에서 작동 .그러나 이것이 컴파일 되더라도 도움이 될까요? getB에 대한 정의는 A.cpp에서만 가능합니다. 템플릿이기 때문에 컴파일러가 "내보내기"를 지원하지 않으면 다른 번역 단위에서 호출 할 수 없습니다. –
편집 응답 : 포인터를 통한 구성원 액세스에는'->'을 사용하십시오. –
오, 이런, 정말 바보 같아. 나는 자바에서 너무 많은 시간을 보냈다. 스티브 도움에 감사드립니다. – LandonSchropp