14

整数値を文字列に挿入しようとして、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)'

どんな助けでも大歓迎です。

4

2 に答える 2

25

MSVC11には適切なオーバーロードがstd::to_stringないため、static_casttounsigned long longまたはを実行する必要がありますlong long

このバグは 2012 年 11 月の CTP で修正されていることに注意してください

于 2013-01-31T03:29:58.723 に答える
3

temp_intint値であり、Visual Studio はdoublelong longまたはのいずれかのunsigned long long値を受け取るオーバーロードのみを検出するように見えるため、使用するオーバーロードがわからないため、あいまいさがあります (ただし、整数を long 値にキャストするのは直感的に見えます)。

temp_intとして宣言するかlong long、関数を呼び出すときにキャストします。

于 2013-01-31T03:32:29.220 に答える