我有这个函数将整数转换为std :: string:
std::string intToStr(const int n) {
stringstream ss;
ss << n;
return ss.str();
}
到目前为止它运行良好,但现在我正在尝试构建一个字符串以放入std ::对,我遇到了一些麻烦。
给定一个整数变量hp
和一个返回整数int maxHP()
的函数,我想构造一个如下所示的字符串:"5/10"
(如果hp
为5并且maxHP
返回10)。
这是我的尝试:
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
}
答案 0 :(得分:4)
失败的原因:
if(verbose)
string ratio = intToStr(hp) + "/" + intToStr(maxHP());
// the block of the if is now over, so any variables defined in it
// are no longer in scope
是变量的范围仅限于它所定义的块。
答案 1 :(得分:1)
以下是我修复代码的方法:
if (div > 1.0f)
{
string str = verbose ? intToStr(hp) + "/" + intToStr(maxHP()) : "astring";
return make_pair(str, someOtherType);
}
更简洁一点。此外,您的格式可以设为a bit more generic。
答案 2 :(得分:0)
看起来可能是const
问题。查看它在错误中报告的重载:
pair(std::pair<_T1, _T2>&&)
pair(const _T1&, const _T2&)
所以看起来它期待const
个参数。