对重载函数的模糊调用 - std :: to_string

时间:2013-01-31 03:27:23

标签: c++ string visual-studio c++11 overloading

在尝试将整数值插入字符串时,我认为当我找到std :: to_string时,我的祈祷得到了回答,但出于某种原因,当我实际尝试使用它时,Visual Studio会抱怨模棱两可。这是我职能的当前版本:

string get_time_remaining (int elapsed)
{
    string remaining;
    string temp_string;

    int time_remaining = TimeLimit - elapsed;

    int temp_int;

    temp_int = int(time_remaining / 3600);

    if(temp_int == 0)
        remaining = "00 : ";
    else
    {
        temp_string = std::to_string(temp_int);   // Here!
        remaining = temp_string + " : ";
    }

    temp_int = time_remaining % 60 + 1;

    if(temp_int < 10)
        remaining = remaining + "0";

    temp_string = std::to_string(temp_int);

    remaining = remaining + temp_string;

    return remaining;
}

我已经尝试在对to_string的调用中输入temp_int,正如你所看到的,我甚至尝试过铸造应该是整数除法的结果,但无论我做什么,VS都会向我吐出来:

d:\my programs\powerplay\powerplay\powerplay.cpp(1285): error C2668: 'std::to_string' : ambiguous call to overloaded function
1>          d:\microsoft visual studio 10.0\vc\include\string(688): could be 'std::string std::to_string(long double)'
1>          d:\microsoft visual studio 10.0\vc\include\string(680): or       'std::string std::to_string(_ULonglong)'
1>          d:\microsoft visual studio 10.0\vc\include\string(672): or       'std::string std::to_string(_Longlong)'

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:23)

MSVC11缺少std::to_string的正确重载,因此您必须执行static_castunsigned long longlong long

请注意,此错误已在11月CTP 2012中修复。您可以获取here

答案 1 :(得分:2)

temp_intint值,Visual Studio似乎只检测到接收doublelong longunsigned long long值的重载,因此它不会不知道要使用哪个重载,因此模糊(尽管将整数转换为长值似乎很直观)

temp_int声明为long long,或在调用函数时将其强制转换