컴파일되지 않는 템플릿 코드가있어서 그 이유를 모르겠습니다. 이 문제는 라인 밖의 메서드 정의로 내부 클래스를 사용하는 것과 관련이있는 것으로 보입니다.내부 클래스를 사용한 템플릿 컴파일 오류
template<typename T>
class Outer {
public:
struct Inner {
T a;
Inner(T _a) : a(_a) {}
};
int foo(T a);
};
template<typename T>
Inner Outer<T>::foo(T a) { //Line 43
Inner ret(a);
return ret;
}
int main(int argc, char *argv[]) {
Outer<int> out;
return 0;
}
그램 ++ 4.2.1 에러 실패 : 43 상기 마크 된 라인을 참조하면 error: expected constructor, destructor, or type conversion before ‘Outer’
다음은 간단한 예이다. foo
의 정의를 인라인으로 이동하면 코드가 제대로 작동합니다.
또한 433 번 라인에서 Inner
을 Outer<T>::Inner
으로 바꾸려고 시도했지만 그 차이는 없습니다.
의견이 있으십니까?
함수는 '내부'가 아니라 'int'를 반환합니다. –