작성
·
112
·
수정됨
0
32:08
Iterator<T> 를 iterator로 재정의 해주고, begin()과 end()의 반환타입을 iterator로 바꿔준후
main의
for(Vector<int>::iterator it = v.begin(); it != v.end(); ++it)
{
}을 돌릴때,
iterator는 Iterator<T> 를 재정의한 것일뿐 동일하니까
Vector<int>::Iterator<int> it =v.begin();
이렇게 바꾼다면 왜 컴파일 에러가 뜨는지 궁금합니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
질문하신 부분에서 컴파일 에러가 발생하는 이유는 typedef
를 사용하여 재정의한 iterator
타입과 직접 명시한 Vector<int>::Iterator<int>
타입 사이의 불일치 때문입니다. typedef
를 통해 Iterator<T>
를 iterator
로 재정의 하면, 이는 템플릿 매개변수가 아닌 특정한 타입으로 취급되기 때문에, Vector<int>::iterator
로 사용할 때와 Vector<int>::Iterator<int>
로 직접 사용할 때 컴파일러가 인식하는 방식에 차이가 생깁니다.
특히, typedef<T>
를 사용할 때는 템플릿 매개변수 <T>
가 잘못 사용되었습니다. C++에서 typedef
를 사용하여 타입을 재정의할 때는 템플릿 매개변수를 이런 방식으로 사용하지 않습니다. 올바르게 쓰려면 typedef
구문 뒤에 템플릿 타입을 직접 명시해 주어야 합니다. 예를 들면, typedef Iterator<int> iterator;
와 같이 사용하는 것입니다. 따라서, Iterator<T>
를 iterator
로 재정의한 것이 정확히 어떻게 이루어졌는지, 그리고 실제 사용한 코드의 문맥을 다시 확인해 볼 필요가 있습니다.
정리하자면, 해당 컴파일 에러는 재정의한 iterator
와 직접적으로 타입을 명시한 Vector<int>::Iterator<int>
사이의 타입 불일치에서 발생하며, 또한 typedef
사용 방식에 오류가 있는 것 같습니다. typedef
를 올바르게 사용했는지, 그리고 타입을 재정의하는 과정에서 템플릿 매개변수를 정확히 어떻게 다뤄야 하는지 확인해 보세요.