2009-10-28 3 views
0

다음은 컴파일되지 않으며 그 이유는 알 수 없습니다.리스트/이터레이터를 사용하여 어리석은 컴파일 오류 (C++)

#include <list> 
using namespace std; 

list<char> myList; 
list<int>::iterator it; 

it = myList.begin(); 

오류 반복자의 종류가 다른

error C2679: binary '=' : no operator found which takes a right-hand operand of type 'std::list<_Ty>::_Iterator<_Secure_validation>' (or there is no acceptable conversion) 
+0

참고. 그래서 다음 줄에는 '[Ty_ = int]와 [Ty_ = char]'와 같은 것이 포함될 것입니다. – MP24

답변

5

list<char> and list<int>은 두 개의 다른 클래스입니다. 그래서 이터레이터는 다른 유형입니다.

typedef _Iterator<_SECURE_VALIDATION_DEFAULT> iterator; 

또는

typedef _Iterator<bla_bla_bla> iterator; 

새로운 유형을 의미

가 각각 별개의 클래스 목록에 의해 정의됩니다 : 당신이 표준 :리스트 클래스의 코드를 보면
당신은 같은 것을 볼 수 있습니다. 즉, 각 목록은 자체 iterator 유형을 정의합니다.

이에 코드를 변경

: 템플릿 관련 오류를 들어, 마이크로 소프트 컴파일러 오류 메시지가 다음 줄에 템플릿 매개 변수를 인쇄 할 것을

list<char>::iterator it; 
+0

Agg, 나는 내가 그것을 didnt하는 것을 믿을 수 없다 : -S – Justin

+2

그것은 보통 당신이 짧은 휴식을 필요로하는 것을 의미한다) – alexkr

3

이유는

list<char> myList; // char 
list<int>::iterator it; // int 

리스트 또는 다른 용기의 형태 만 템플릿 아니라고 조심 유형 매개 변수뿐 아니라 다른 모든 템플릿 매개 변수도 있습니다. 예를 들면 다음과 같습니다.

list<char, MyAllocator> mylist; 
list<char, YourAllocator> yourlist; 
// typeof mylist != type of yourlist  (!!!)