Неоднозначный вызов перегруженной функции - std:: to_string
При попытке вставить целочисленные значения в строку, я подумал, что на мои молитвы ответил, когда я нашел 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;
}
Я попробовал кастинг temp_int внутри вызова to_string, и, как вы можете видеть, я даже попытался сделать результат того, что должно быть целочисленным делением, но независимо от того, что я делаю, 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)'
Любая помощь будет оценена.
Ответы
Ответ 1
MSVC11 не имеет надлежащих перегрузок для std::to_string
, поэтому вам нужно сделать от static_cast
до unsigned long long
или long long
Обратите внимание, что эта ошибка исправлена в ноябрьском CTP 2012. Что вы можете получить здесь.
Ответ 2
temp_int
- это значение int
, и Visual Studio, по-видимому, обнаруживает только перегрузки, которые получают значения double
, long long
или unsigned long long
, поэтому он не знает, какую перегрузку использовать, неоднозначность (хотя казалось бы, интуитивно было бы отличать целое число от длинных значений)
Объявить temp_int
как long long
или применить его при вызове функции