인프런 커뮤니티 질문&답변

hush park님의 프로필 이미지
hush park

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

vector #4

typedef<T> iterator; 부분 관련 질문입니다

작성

·

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를 올바르게 사용했는지, 그리고 타입을 재정의하는 과정에서 템플릿 매개변수를 정확히 어떻게 다뤄야 하는지 확인해 보세요.

hush park님의 프로필 이미지
hush park

작성한 질문수

질문하기