typedef<T> iterator; 부분 관련 질문입니다
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를 올바르게 사용했는지, 그리고 타입을 재정의하는 과정에서 템플릿 매개변수를 정확히 어떻게 다뤄야 하는지 확인해 보세요.
소스코드와 관련하여 질문드립니다
0
70
1
map 컨테이너의 emplace 함수에 대해
0
112
2
시작이 안되네요...!
0
96
2
EAX 명령어 실행 시 RAX의 상위 32비트가 초기화 되는 이유
0
125
1
리틀 엔디안 장점 질문합니다.
0
131
1
메모리 창에 주소를 넣었는데 영어 꺠짐
0
124
1
타입변환#2 build시 knight 인접 stack이 침범당했다는 error가 발생합니다.
0
94
2
map #1 8분 58초 맵은 레드블랙트리로 이루어진 것 같습니다.
1
138
2
hello world 부터 오류 ㅠㅜ
0
188
1
지역변수가 스택? 레지스터
0
127
2
마지막 문제 질문드립니다.
0
163
2
메모리창이 비활성화됩니다.
0
98
1
이중포인터 강좌 부분 질문있습니다.
0
145
1
2를 더하는 이유
0
133
1
메모리 주소 창 엔디안 질문 드립니다. 인프런 봇 답변도 괜찮습니다
1
110
1
해당 코드는 왜 오류가 날까요?
0
154
1
마지막 문제 질문 있습니다.
0
118
1
강의 마지막부분에 질문이 있습니다.
0
190
2
Field초기화
0
140
1
virtual과 override 차이
0
314
2
3:30 참조자 리턴
0
166
1
map 찾기
0
157
1
프로그램 질문드려요
0
258
1
캐스팅 질문
0
137
1





