2017-05-17 18 views
1

から「constのはstd :: reverse_iterator <_RanIt>&」のテンプレート引数を推測できませんでしたか? std::reverse_iteratorはどこから来たのですか?は「のstd ::文字列」

エラーC2784: 'STD :: reverse_iterator < _RanIt>のstd ::演算子+(reverse_iterator < _RanIt> :: difference_type、constのはstd :: reverse_iterator < _RanIt> &)': 'のテンプレート引数を推定できませんでしたconstのはstd :: reverse_iterator < _RanItのstd ::文字列 '

+0

何が '1.0f'ですか? – RoiHatam

+1

@RoiHatamこれは浮動小数点の書き方です – Pavel

+0

これは私の愚かな間違いです。私は 'std :: to_string'を数字に使うのを忘れていました。 –

答えて

0

は確かに、それは、Microsoftのコンパイラから予想されるエラーメッセージです」から'> &。何operator+はあなたのコードがコンパイルされませんstd::string山車を追加するとするために存在していないがあるので

 // 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); 
    } 

:あなたは別のイテレータのためのいくつかのoperator+テンプレートを定義<string>ヘッダが含まれているため、それが起こる

理由があります。しかし、コンパイル時にコンパイラが上記のstd::operator+が浮動小数点がreverse_iterator<_RanIt>::difference_typeに変換される可能性があるので検出可能性があることが検出されました。試したときにoperator+_RanItの代わりに使用するタイプを推測することができず、std::stringからconst reverse_iterator<_RanIt>&に変換されました。

あなたが述べたように、コンパイラは、他のイテレータ型のためoperator+の他のバージョンを一致させようとします:

エラーC2784:「STD :: _ Array_const_iterator < _Ty、_Size>のstd ::演算子 +(_ Array_const_iterator < _Ty、_Size> :: difference_type、STD :: _ Array_const_iterator < _Ty、_Size>) ': は 用テンプレート引数を推定できなかった 'のstd :: _ Array_const_iterator < _Ty、_Size>のstd ::文字列 ''' から

エラーR C2784: 'のstd :: _ Array_iterator < _Ty、_Size>のstd ::演算子 +(_ Array_iterator < _Ty、_Size> :: difference_type、STD :: _ Array_iterator < _Ty、_Size>)': は 用テンプレート引数を推定できませんでしたあなたが最初の数値を文字列に変換し、連結すべき++ Cの 'のstd ::文字列' 'からのstd :: _ Array_iterator < _Ty、_Size>' ...側の注意点として

、(たとえば、追加する)。これはあなたのために働くはずです:

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

ありがとうパベル。私はなぜC++がそのような演算子を定義しないのが厳しいのだろうと思っています。 –

+0

これはC++では少し面倒なので、float +の文字列は何をすべきか明確ではないためです。 'std :: to_string(1.0f)+ a ' – Pavel

+0

@ fk-ken-white JavaScriptのような言語で何が起こるのか、C++はそれを定義しないと思います文字列と数字を「追加」します。 '' 10 "+ 2"とは何が等しいのですか? '' 102 ''や' 12''?もちろん、ルールを知っていれば分かるかもしれませんが、C++コードを読んでいる人があなたのものを推測する必要がないように明示的にする方が良いです。*これは開発者が最も時間を失う場所です。著者が意図したことを理解する。これらの演算子を残すと、あなたはあなたの意図を明示するよう強制されます。 – cdhowie

関連する問題