template 사용 소스인데 에러납니다..

doogie의 이미지

제가 아직 실력이 모자라서 그런지
이 코드가 왜 에러가 나는지 모르겠습니다.

무슨 원인인지 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"

도움을 부탁드립니다.

kewlbear의 이미지

iterator 선언이 아니라 그 윗줄에 문제가 있는 것 같습니다.
push_back에는 object를 넘겨주셔야 하는데 type을 쓰셨네요.
참고로 그 위의 begin도 필요가 없는 것 같습니다.
템플릿 클래스를 만드시기 전에 STL 사용법부터 공부하심이 좋을 것 같습니다.

doogie의 이미지

웁쓰~
tl.push_back (T);
이 부분은 제가 테스트코드를 대충 만드느라
발생한 오류군요..

tl.begin ();
이 부분은 혹시 이것도 에러가 나는지 컴파일을
해보기 위해 적은 것입니다.

헷갈리게 적어서 죄송합니다..
하지만 iterator 선언에서 에러가 나는것은 맞습니다.
제가 알고 싶은 것은 마지막 줄의
std::list <T> :: iterator it;
여기서 발생하는 에러의 원인입니다....

언제나 처음처럼 ~~

doldori의 이미지

doogie wrote:
제가 알고 싶은 것은 마지막 줄의
std::list <T> :: iterator it;
여기서 발생하는 에러의 원인입니다....

가끔 나오는 실수죠. 이렇게 하면 std::list<T>의 정적 멤버인 iterator를 뜻하는
것으로 해석됩니다. 물론 문법 에러지요.
여기서 iterator는 type parameter T에 의존하는 이름입니다. 템플릿에서
의존하는 이름(dependent name)이 형명을 나타낼 경우 typename을 붙여야
합니다. 따라서
typename std::list <T> :: iterator it;
doogie의 이미지

doldori님 감사합니다...
이것땜에 하루를 꼬박 날렸네요 @@

다시 한번 정말 감사드립니다 ^^

언제나 처음처럼 ~~

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.