对重载函数的不明确调用 - std::to_string

Ambiguous call to overloaded function - std::to_string

本文关键字:std to string 调用 重载 函数 不明确      更新时间:2023-10-16

在尝试将整数值插入字符串时,我认为当我发现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 programspowerplaypowerplaypowerplay.cpp(1285): error C2668: 'std::to_string' : ambiguous call to overloaded function
1>          d:microsoft visual studio 10.0vcincludestring(688): could be 'std::string std::to_string(long double)'
1>          d:microsoft visual studio 10.0vcincludestring(680): or       'std::string std::to_string(_ULonglong)'
1>          d:microsoft visual studio 10.0vcincludestring(672): or       'std::string std::to_string(_Longlong)'

任何帮助将不胜感激。

MSVC11 缺少用于std::to_string的适当重载,因此您必须执行static_cast才能unsigned long longlong long

请注意,此错误已在 2012 年 11 月的 CTP 中修复。你可以在这里得到。

temp_int是一个

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

要么将temp_int声明为long long,要么在调用函数时强制转换它