整数をstd::stringに変換するこの関数があります:
std::string intToStr(const int n) {
stringstream ss;
ss << n;
return ss.str();
}
これまではうまく機能していましたが、std :: pairに入れる文字列を作成しようとしていますが、問題が発生しています。
整数変数hp
と整数を返す関数が与えられた場合int maxHP()
、次のような文字列を作成します( 5の"5/10"
場合は10を返します)。hp
maxHP
これが私の試みです:
string ratio = intToStr(hp) + "/" + intToStr(maxHP());
return pair<string, OtherType>(ratio, someOtherType);
g ++でコンパイルすると、次のエラーで失敗します。
src/Stats.cpp:231: error: no matching function for call to
‘std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,
TCODColor>::pair(<unresolved overloaded function type>, const TCODColor&)’
/usr/include/c++/4.4/bits/stl_pair.h:92: note: candidates are: std::pair<_T1,
_T2>::pair(std::pair<_T1, _T2>&&) [with _T1 = std::basic_string<char,
std::char_traits<char>, std::allocator<char> >, _T2 = TCODColor]
/usr/include/c++/4.4/bits/stl_pair.h:83: note: std::pair<_T1,
_T2>::pair(const _T1&, const _T2&) [with _T1 = std::basic_string<char,
std::char_traits<char>, std::allocator<char> >, _T2 = TCODColor]
/usr/include/c++/4.4/bits/stl_pair.h:79: note: std::pair<_T1,
_T2>::pair() [with _T1 = std::basic_string<char, std::char_traits<char>,
std::allocator<char> >, _T2 = TCODColor]
/usr/include/c++/4.4/bits/stl_pair.h:68: note:
std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >,
TCODColor>::pair(const std::pair<std::basic_string<char, std::char_traits<char>,
std::allocator<char> >, TCODColor>&)
だからstd::pairは私の文字列が好きではありません。OtherType
正常にコンパイルされる別のペアコンストラクターがあるため、問題が発生していないことを確認しました。
pair<string, OtherType>("astring", someOtherType);
誰かが私がこれを修正する方法を見ますか?
答えは奇妙でしたが、それを修正しました。私の問題は、どういうわけか比率が定義されていないということでしたが、g++はそれについて教えてくれませんでした。make_pair
GManが提案したようにコードを変更すると、突然それがわかりました。なぜそれが起こるのか誰もが知っていますか?
関数の詳細は次のとおりです。
if(verbose)
string ratio = intToStr(hp) + "/" + intToStr(maxHP());
if(div > 1.0f) {
if(verbose) return pair<string, OtherType>(ratio, someOtherType); // doesn't compile
else return pair<string, OtherType("astring", someOtherType); // compiles
}
修正されたコードは次のとおりです。
string ratio = intToStr(hp) + "/" + intToStr(maxHP());
if(div > 1.0f) {
if(verbose) return make_pair(ratio, someOtherType); // compiles now
else return make_pair("astring", someOtherType); // compiles
}