Dereference와 Acquir 멤버함수의 리턴타입이 DATA*인데
함수 내부에서는 std::vector<DATA>의 iterator을 리턴하므로
iterator을 DATA*로 바꿀 수 없다는
컴파일 에러가 뜹니다
어떻게 해야 되나요?
[GPG 1 글 1.6] 124페이지 목록 1.6.2
Moderator: 류광
-
- Posts: 3805
- Joined: 2001-07-25 09:00
- Location: GPGstudy
- Contact:
-
- Posts: 3805
- Joined: 2001-07-25 09:00
- Location: GPGstudy
- Contact:
이상하네요... 방금 비회원으로도 시험해 봤는데 잘 되는 것 같은데요. 어쨌든 좀 더 살펴보겠습니다.
그리고 질문 자체는...
GPG 1권 때만 해도 컴파일러들이(그리고 프로그래머들이) C++ 표준을 잘 못 지켰던 시절이었던지라 요즘 컴파일러에서 오류가 나는 코드들이 좀 있습니다.
오류 메시지에 암시된 대로... 함수 반환 형식을 vector::iterator 로 바꾸고 호출 쪽 코드도 그에 맞게 수정하면 되지 않을까요. 다행히 C++ 반복자는 C 포인터 연산을 흉내낸 것이라서 코드를 크게 고칠 필요는 없을 것입니다.
p.s. 아, 글쓰기 관련 문제의 원인을 알았습니다.... 미리보기를 거치면 참조 코드가 사라져 버리내요.. 조만간 수정하겠습니다. 이 글의 카탈로그 참조는 수동으로 설정했습니다...
그리고 질문 자체는...
GPG 1권 때만 해도 컴파일러들이(그리고 프로그래머들이) C++ 표준을 잘 못 지켰던 시절이었던지라 요즘 컴파일러에서 오류가 나는 코드들이 좀 있습니다.
오류 메시지에 암시된 대로... 함수 반환 형식을 vector::iterator 로 바꾸고 호출 쪽 코드도 그에 맞게 수정하면 되지 않을까요. 다행히 C++ 반복자는 C 포인터 연산을 흉내낸 것이라서 코드를 크게 고칠 필요는 없을 것입니다.
p.s. 아, 글쓰기 관련 문제의 원인을 알았습니다.... 미리보기를 거치면 참조 코드가 사라져 버리내요.. 조만간 수정하겠습니다. 이 글의 카탈로그 참조는 수동으로 설정했습니다...
-
- Posts: 3805
- Joined: 2001-07-25 09:00
- Location: GPGstudy
- Contact:
-
- Posts: 3805
- Joined: 2001-07-25 09:00
- Location: GPGstudy
- Contact:
지금 생각하니 그냥 return &(*it) 로 하면 되겠네요.. 왜 저렇게 복잡하게 생각했는지...류광 wrote:클래스의 용도를 생각하면 함수의 반환 형식을 고칠 것이 아니라 return 문에서 DATA*로 강제 형변환(캐스팅)을 해야 할 것 같은데, 표준을 만족하는 방식은 아닙니다. (설사 대부분의 컴파일러들이 vector<T>를 T[]로 구현한다고 해도요.)
템플릿을 한겹 더 씌워서 어떻게 할 수 있을 것 같기도 한데, 그러면 그 글과 예제 전체를 뜯어 고쳐야 할 것 같습니다....
p.s. 카탈로그 참조 기능 수정 했습니다. 이제는 미리보기를 거쳐도 잘 등록될 것입니다.