template 사용 소스인데 에러납니다..
글쓴이: doogie / 작성시간: 화, 2005/12/13 - 5:16오후
제가 아직 실력이 모자라서 그런지
이 코드가 왜 에러가 나는지 모르겠습니다.
무슨 원인인지 std::list의 iterator를 선언할때
template 인자를 넣으면 에러가 나고
template 인자가 아닌 다른 타입을 넣으면 에러가
나지 않습니다.
소스코드는 다음과 같구요...
#include <list> template <typename T> class TT { public: std::list <T> tl; TT () { tl.begin (); tl.push_back (T); std::list <T> :: iterator it; } };
이부분이 에러 메시지입니다.
tt.cpp: In constructor `TT<T>::TT()':
tt.cpp:14: error: expected primary-expression before ')' token
tt.cpp:15: error: expected `;' before "it"
도움을 부탁드립니다.
Forums:
iterator 선언이 아니라 그 윗줄에 문제가 있는 것 같습니다.p
iterator 선언이 아니라 그 윗줄에 문제가 있는 것 같습니다.
push_back에는 object를 넘겨주셔야 하는데 type을 쓰셨네요.
참고로 그 위의 begin도 필요가 없는 것 같습니다.
템플릿 클래스를 만드시기 전에 STL 사용법부터 공부하심이 좋을 것 같습니다.
웁쓰~tl.push_back (T);이 부분은 제가 테스트코드를
웁쓰~
tl.push_back (T);
이 부분은 제가 테스트코드를 대충 만드느라
발생한 오류군요..
tl.begin ();
이 부분은 혹시 이것도 에러가 나는지 컴파일을
해보기 위해 적은 것입니다.
헷갈리게 적어서 죄송합니다..
하지만 iterator 선언에서 에러가 나는것은 맞습니다.
제가 알고 싶은 것은 마지막 줄의
std::list <T> :: iterator it;
여기서 발생하는 에러의 원인입니다....
언제나 처음처럼 ~~
[quote="doogie"]제가 알고 싶은 것은 마지막 줄의std:
가끔 나오는 실수죠. 이렇게 하면 std::list<T>의 정적 멤버인 iterator를 뜻하는
것으로 해석됩니다. 물론 문법 에러지요.
여기서 iterator는 type parameter T에 의존하는 이름입니다. 템플릿에서
의존하는 이름(dependent name)이 형명을 나타낼 경우 typename을 붙여야
합니다. 따라서
typename std::list <T> :: iterator it;
doldori님 감사합니다...이것땜에 하루를 꼬박 날렸네요 @@
doldori님 감사합니다...
이것땜에 하루를 꼬박 날렸네요 @@
다시 한번 정말 감사드립니다 ^^
언제나 처음처럼 ~~
댓글 달기