이거 어디가 잘못 되었는지 봐주시기 바랍니다.
글쓴이: puaxx / 작성시간: 월, 2005/08/22 - 10:37오전
39 template<class From, class To> 40 class RangeMapIter { 41 private: 42 size_t count_ ; 43 typename Vector<RangeMapRange<From,To> >::const_iterator ptr_ ; 44 45 public: 46 RangeMapIter(const RangeMap<From,To> &map); 47 Boolean next(From &fromMin, From &fromMax, To &toMin) { 48 if (!count_) 49 return 0; 50 else { 51 fromMin = (ptr_)->fromMin; 52 fromMax = (ptr_)->fromMax; 53 toMin = (ptr_)->toMin; 54 (ptr_)++; 55 count_--; 56 return 1; 57 } 58 } 59 };
컴파일 하면 위의 단락에서 아래와 같은 에러가 출력됩니다.제가 C++은 잘몰라서 어디가 잘못된건지 모르겠습니다..
컴파일러 버전 : gcc version 3.4.2 20041017 (Red Hat 3.4.2-6.fc3)
이게 2.95 에서는 무리없이 컴팔했는데...다른 시스템에서 하려니 안되네요.
../include/RangeMap.h: At global scope: ../include/RangeMap.h:43: error: expected `;' before "ptr_" ../include/RangeMap.h: In member function `Boolean RangeMapIter<From, To>::next(From&, From&, To&)': ../include/RangeMap.h:51: error: `ptr_' undeclared (first use this function) ../include/RangeMap.h:51: error: (Each undeclared identifier is reported only once for each function it appears in.)
Forums:
Vector, RangeMapRange 등의 클래스가 적절히 정의되었다고
Vector, RangeMapRange 등의 클래스가 적절히 정의되었다고 가정한다면
문제 없는 코드로 보입니다.
typename Vector<RangeMapRange<From
typename Vector<RangeMapRange<From,To> >::const_iterator ptr_ ;
에서 ::const_iterator 부분을 빼주니 컴파일이 되다가 아래와 같이 에러가 나옵니다.
위에는 스트럭쳐 정의 부분입니다..
뭐가 잘못된걸까요?
Re: 이거 어디가 잘못 되었는지 봐주시기 바랍니다.
RangeMap 클래스의 정의와 RangeMapIter 생성자의 정의가 어떻게 되어 있는지요.
저기서 ptr_ 은 타입을 private 멤버로 갖고 있는거지 iterator자체가 할당된건 아닌 상태라고 봐집니다만. 차라리,
가 되어야 하는것 같은데. 아님 typedef를 활용하시던지...
[quote="SaNha"]저기서 ptr_ 은 타입을 private
typename을 빼면 문법 에러입니다. (Vector 클래스에서 const_iterator라는 형이
public으로 정의되었다는 가정하에) Vector::const_iterator는 템플릿 타입 파라미터인
From, To에 의존하는 dependent name이기 때문에 typename을 붙여야 합니다.
ptr_은 형명이 아니라 Vector::const_iterator형의 멤버 데이터가 되고요.
[quote="Anonymous"]typename Vector<Ra
통상적인 명명법이나 문맥으로 볼 때 ::const_iterator를 없애면 안될 것 같은데요.
[quote="doldori"][quote="Anonymous"]type
그런데 ::const_iterator를 붙이면
이런 에러가 나면서 컴파일이 진행되지 않구요..빼주면 컴파일은 되더라구요...
아래는 전체 소스 입니다.
이소스는 SGML파서 소스의 일부입니다..
[quote="puaxx"]그런데 ::const_iterator를 붙이면
Vector.h의 내용을 봐야 확실히 알 수 있겠습니다만, 지금 짐작으로는 아래처럼
RangeMapIter::next()를 실제로 호출해 보면 컴파일이 안될지도 모릅니다.
흠..
2.95에서는무리없이 컴파일 되던게 3.x에서는 컴파일이 안되니 황당하네요..쩝..
댓글 달기