[질문]STL 공부하다가..

crom123의 이미지

int main()
{
	typedef list<int>	list_any;

	list_any	list_some;
	typedef	list_any::iterator	list_anyIter;
	list_anyIter	start, end, it;
	start	= list_some.begin();
	generate_n(inserter(list_some, start), 7, Fibonacci);
//또는       generate_n(inserter( list_some, list_some.begin() ), 7, Fibonacci);

	return 0;
}

이렇게 하면 되구요.
int main() 
{ 
   list<int>   list_any; 

   list<int>::iterator   list_anyIter; 

//   list_anyIter   start;
   start   = list_anyIter.begin();
   generate_n(inserter(list_any, start), 7, Fibonacci); //<- 이 부분에서 에러가 발생합니다. 

   return 0; 
}

에러 코드 입니다.(VC6.0-STLport라이브러리 사용)
error C2065: 'start' : undeclared identifier
error C2039: 'begin' : is not a member of '_List_iterator<int,struct _STL::_Nonconst_traits<int> >'

* Fibonacci는 그냥 피보나치 수열을 발생시키는 함수입니다.
typedef의 역할이 뭔가여?
STL을 사용하기 전에는 typedef는 그냥 구조체 선언할 때 별 신경안쓰고 썼는데.. 뭔가 역할이 있는 듯한데요..
mastercho의 이미지

typedef는 기존의 타입을 다른 이름으로 설정하는것입니다

별칭을 만들어 쓰는것이죠

타입이름이 길어서 줄여 쓸때 씁니다

일반적으로 C책에 나오는 내용이죠

C++를 배우시더라도 C의 내용도 배워 볼만합니다

승자는 자기보다 우월한 사람을 보면 존경심을 갖고 그로부터 배울 점을 찾지만 패자는 자기보다 우월한 사람을 만나면 질투심을 갖고 어디 구멍난 곳이 없는지 찾는다.
- 하비스

mykldp의 이미지

int main() 
{ 
   list<int>   list_any; 
   list<int>::iterator start = list_any.begin(); 
   generate_n(inserter(list_any, start), 7, Fibonacci); 

   return 0; 
} 

이렇게 고치시면 될겁니다.(테스트는 안해봤음) typedef 는 타입 이름에 대한 별명(alias)이라고 생각하시면 됩니다.
예를 들어 typedef int myInt; 라고 써주면 이 선언 이후로 int 를 써야할 자리에 myInt 를 써도 상관없다는 겁니다.
typedef는 신경 안쓰고 넘어갈만한 게 아닙니다^^; 역할은 단순히 별명을 만들어주는 거지만 클래스의 멤버로 template 과 함께 쓰이면 대단한 위력을 발휘합니다. typedef 에 대해서 책을 자세히 읽어보세요.

...써놓고 보니 다른 분이 이미 답변을 다셨군요. 이 시간에 이리 빨리 답변이 올라오다니 놀랍습니다 :)

crom123의 이미지

만일 단지 typedef가 별칭을 선언하는거라면
두번째 소스에서 generator_n에서 start를 써도 상관없는 거 아닙니까?
첫번째 소스에서는 start를 써도 되고 list_some.begin으로 써도 상관없든데요..
아직도 아리송한데요..ㅠ.ㅠ;

최병현의 이미지

crom123 wrote:

int main() 
{ 
   list<int>   list_any; 

   list<int>::iterator   list_anyIter; 

//   list_anyIter   start;
   start   = list_anyIter.begin();
   generate_n(inserter(list_any, start), 7, Fibonacci); //<- 이 부분에서 에러가 발생합니다. 

   return 0; 
}

에러 코드 입니다.(VC6.0-STLport라이브러리 사용)
error C2065: 'start' : undeclared identifier
error C2039: 'begin' : is not a member of '_List_iterator<int,struct _STL::_Nonconst_traits<int> >'

두번째 소스에 대해서는 이미 질문내용에 답이 있습니다.

start는 undeclared이기 때문에 발생한 오류입니다. 위에 defintion을 comment처리 하셨습니다. 아마 이 내용은 알고 계실 것 같습니다.

begin()의 문제는 begin이 list_anyIter 즉, List_iterator<int,struct _STL::_Nonconst_traits<int> >의 member가 아니라는 것입니다.
code로만 보았을 때는 아마도 list_any의 member인 것으로 생각됩니다.

To be a rich

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.