저는 새로운 C++ 프로그래머입니다. 저는 전에 Java와 ANSI C를 배웠고 한 발을 내딛기로 결정했습니다.지도를 사용한 부분 클래스 템플릿 전문화
글쎄, 나는 C++를 사랑하지만 나는 반복자의 작동 방식을 좋아하지 않았다
자바에서, 당신은 전체 컨테이너가 비공개로하고, 반복자에 게터 기능을 구현할 수 있고, 반복자는 방법이있다 hasNext()
은 컨테이너의 끝에 도달했는지에 따라 부울을 반환합니다.
내가 interator이 iteratorBegin()
에 의해 반환 된 반복자를 증가하고 iteratorEnd()
과 비교, 처음과 마지막 위치에 해당하는 반환이 게터, iteratorBegin()
및 iteratorEnd()
을 쓰고 ++ C에 비슷한 수행 발견하는 유일한 방법, 나에게 허용 최종 위치가
"의 내 자신의 반복자 클래스를 만들자" 설정과 목록을 사용하여 성공적으로 수행했지만 맵으로 만들 수는 없습니다. 여기에 코드가 있습니다. 저를 roubling :
template<typename T, typename D>
const D& custIterator<T,D>::next()
{
const D& obj = (*it);
if(hasNext())
{
it++;
}
return obj;
}
//the above works fine
template<typename T, typename D>
const D& custIterator<map<T,D>,D>::next() //error in this line
{
D& obj = (*it).second;
if(hasNext())
{
it++;
}
return obj;
}
전문 방법을 컴파일, 그것은 말한다 (클래스가 별도의 .H에 정의되어 있습니다, 이것은 customIterator.cpp라고 함) : 오류 : '매핑'이 범위 도 선언되지 않았습니다 내가 codeblocks 사용하여 파일
내가 GCC 버전 4.4.5을 사용하고 위에 (데비안 4.4.5-8)에 #include <map>
을 추가하지만
, 나는 약간의 도움이 필요하십시오.
감사합니다.
지도를 포함하여 std :: map을 사용합니다. 또는 custIterator ...과 같이 맵을 한정하면 트릭을 수행 할 수 있습니다. –