首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对重载函数的调用不明确- std::to_string

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

Stack Overflow用户
提问于 2013-01-31 11:27:23
回答 2查看 22.8K关注 0票数 14

在尝试将整数值插入字符串时,我以为当我找到std::to_string时,我的祈祷得到了回应,但由于某种原因,每当我实际尝试使用它时,Visual Studio都会抱怨它的多义性。下面是我的函数的当前化身:

代码语言:javascript
复制
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都会向我显示以下内容:

代码语言:javascript
复制
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)'

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-31 11:29:59

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

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

票数 25
EN

Stack Overflow用户

发布于 2013-01-31 11:32:29

temp_int是一个int值,而Visual Studio似乎只检测接收doublelong longunsigned long long值的重载,所以它不知道使用哪个重载,从而产生了多义性(尽管将整数转换为长值似乎很直观)

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14617950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档