2017-05-17 2 views
1

은 '표준 : : 문자열'에서 'const를 표준 :: reverse_iterator <_RanIt> &'에 대한 템플릿 인수를 추론 할 수 없었다? std::reverse_iterator은 어디에서 왔습니까?내가 Visual Studio에서 같은 코드를 작성할 때

오류 C2784 : '표준 :: reverse_iterator < _RanIt> 표준 : : 연산자 + (reverse_iterator < _RanIt> :: difference_type, const를 표준 :: reverse_iterator < _RanIt> &)': '에 대한 템플릿 인수를 추론 할 수 없었다 const를 표준 :: reverse_iterator < _RanIt 표준 : : 문자열 '

+0

무엇입니까'1.0f' 무엇입니까? – RoiHatam

+1

@RoiHatam 그것이 당신이 수레를 쓰는 방법입니다 – Pavel

+0

이것은 제 어리석은 실수입니다. 숫자에'std :: to_string'을 사용하는 것을 잊었습니다. –

답변

0

는 사실, 즉 마이크로 소프트 컴파일러에서 예상되는 오류 메시지의'에서 '> &. 더 operator+가 수레를 추가하고 존재하지가 있기 때문에

 // reverse_iterator TEMPLATE OPERATORS 
template<class _RanIt> inline 
    reverse_iterator<_RanIt> operator+(
     typename reverse_iterator<_RanIt>::difference_type _Off, 
     const reverse_iterator<_RanIt>& _Right) 
    { // return reverse_iterator + integer 
    return (_Right + _Off); 
    } 

std::string 코드가 컴파일되지 않습니다 : 당신이 다른 반복자 몇 operator+ 템플릿을 정의 <string> 헤더를 포함하기 때문에

이 일어나는 이유입니다. 하지만 컴파일러가 플로피가 reverse_iterator<_RanIt>::difference_type으로 변환 될 수 있기 때문에 컴파일러가 위에서 언급 한 std::operator+이 가능한 후보가 될 수 있음을 감지했습니다. 시도한 결과 operator+_RanIt 대신 어떤 유형을 사용해야하는지 추론 할 수 없었으므로 std::stringconst reverse_iterator<_RanIt>&으로 변환했습니다.

오류 C2784 :

당신이 언급 한 바와 같이

는, 컴파일러는 다음 다른 반복자 유형 operator+의 다른 버전을 일치 시키려고 '표준 : _ Array_const_iterator < _Ty, _size> 표준 : 운영자 + (_ Array_const_iterator < _Ty, _size> :: difference_type, 표준 : _ Array_const_iterator < _Ty, _size>) ' 이 에 대한 템플릿 인수를 추론 할 수없는'표준 : _ Array_const_iterator < _Ty, _size> 표준 : : 문자열 ''에서 '

실수 R C2784 : '표준 : _ Array_iterator < _Ty, _size> 표준 : 운영자 + (_ Array_iterator < _Ty, _size> :: difference_type, 표준 : _ Array_iterator < _Ty, _size>)' 는 에 대한 템플릿 인수를 추론 할 수 없었다 '표준 : _ Array_iterator < _Ty, _size>'당신이 먼저 숫자를 문자열로 변환 한 후 연결할한다 ++ C에서 '표준 : : 문자열'... 보조 노트로

에서 (예를 들어, 추가). 이것은 당신을 위해 작동해야합니다 :

b += std::to_string(1.0f) + a; 
+0

고마워요 파벨. C++이 왜 그런 연산자를 정의하지 않는지에 대해 엄격한 이유가 궁금합니다. –

+0

C++에서 약간 서툴기 때문에 float + string이 어떤 일을해야하는지 명확하지 않습니다. 대신에 이렇게해야합니다 :'std :: to_string (1.0f) + a' – Pavel

+0

@ fk-ken-white C++은 JavaScript와 같은 언어에서 일어나는 일 때문에 정의하지 않는다고 가정합니다. 문자열과 숫자를 "추가"합니다. ''10 "+ 2'는 무엇을 동등하게합니까? ''102 ''또는'12'? 물론 규칙을 알고 있다면 알아낼 수 있지만 명시 적으로 C++ 코드를 읽는 사람이 당신이 의미하는 바를 추측 할 필요가 없도록하는 것이 낫습니다. * 개발자가 가장 많은 시간을 낭비하는 곳입니다. 저자가 의도 한 것을 파악하십시오. 이 연산자를 떠나면 의도에 대해 명시해야합니다. – cdhowie

관련 문제