잠금 해제 맵을 구현하려고하는데 문제가 발생했습니다. 내 반복자 클래스에서클래스에 적합한 연산자가 없습니다. ->
가 나는 operator->
자유롭게 first
및 second
를 얻기 위해 구현 :
template <class _Kty, class _Ty>
struct _t_iterator_return
{
_Kty& first; // key
_Ty& second; // val
_t_iterator_return(_Kty& k, _Ty& v) : first(k), second(v) {}
};
그것이 표준이되지 않는 것 같습니다 :입니다
_t_iterator_return<_Kty, _Ty> operator->()
{
_t_iterator_return<_Kty, _Ty> tmp((int&)Cur->getKey(), Cur->getValue());
return tmp;
}
? 하지만 내 main()
이 :이 코드 그럼에도 불구하고 error C2819: type 'lightforce::core::LFMap<_Kty,_Ty>::_t_iterator_return<_Kty,_Ty>' does not have an overloaded member 'operator ->'
을 :
for(LFMap<int, stringc>::iterator it = m.begin(); !it.end(); ++it)
fprintf(mres, "K: %7d V: %s\n", it->first, it->second.c_str());
은 컴파일 타임 오류가 발생한다
for(LFMap<int, stringc>::iterator it = m.begin(); !it.end(); ++it)
fprintf(mres, "K: %7d V: %s\n", it.operator->().first, it.operator->().second.c_str());
성공적으로 컴파일 잘 작동되었습니다! 왜 ->
이 작동하지 않지만 operator->
은 작동합니까?
: '오류 C2818 :'-> 운영자 '유형'lightforce :: 핵심 통해 반복적 인 과부하의 응용 프로그램을
는
operator ->
단순히this
반환_t_iterator_return
에 추가 :: LFMap <_Kty,_Ty> :: _ t_iterator_return <_Kty,_Ty> ' – Netherwire@RomanChehowsky [clang] (http://coliru.stacked-crooked.com/a/eebb74b503f2b09b) 및 [g ++] (http : //coliru.stacked -crooked.com/a/317a4c9464745e36). MSVS 버그 일 수 있습니다. – Casey
기다릴 필요가 없습니다. 하지만'_t_iterator_return <_Kty, _Ty> * 연산자 -> {return this;}','_t_iterator_return이 아닌 <_Kty, _Ty> & 연산자 -> {return * this;}'내가 시도한 :) Thx 많이! – Netherwire