Чтобы получить точность и масштаб числа, я использую эту простую программу. Но при преобразовании числа в строку он дает ошибку компиляции.
g++ precision.cpp
precision.cpp: In function ‘int main():
precision.cpp:6: error: ‘to_string was not declared in this scope
Когда я компилирую с помощью -std=c++0x
я получаю
g++ precision.cpp -std=c++0x
precision.cpp: In function ‘int main():
precision.cpp:6: error: call of overloaded ‘to_string(int) is ambiguous
/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../include/c++/4.4.4/bits/basic_string.h:2604: note: candidates are: std::string std::to_string(long long int)
/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../include/c++/4.4.4/bits/basic_string.h:2610: note: std::string std::to_string(long long unsigned int)
/usr/lib/gcc/i686-redhat-linux/4.4.4/../../../../include/c++/4.4.4/bits/basic_string.h:2616: note: std::string std::to_string(long double)
Исходный код выглядит так:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string value = to_string(static_cast<int>(1234));
int precision = value.length();
int scale = value.length()-value.find('.')-1;
cout << precision << " " << scale;
return 0;
}
Что вызывает эту ошибку?
Первая ошибка std::to_string
тем, что std::to_string
- это функция С++ 11, а GCC по умолчанию компилируется в режиме С++ 03.
Вторая ошибка, когда вы используете правильный флаг, вероятно, связана с тем, что поддержка С++ 11 в GCC 4.4 (которую вы, кажется, используете) весьма минимальна. Как вы можете видеть сообщения об ошибках, компилятор показывает вам альтернативы, которые он имеет.
Кстати, вам не нужно вводить целые литералы в int
, они имеют тип int
по умолчанию. Возможно, вы захотите отдать его long double
хотя это одна из допустимых перегрузок, и вам кажется, что вы хотите найти десятичную точку (код не будет работать так, как ожидалось, если в строке нет десятичной точки, например, при преобразовании целое число).
std::cout << "The string is \"" << value << "\"\n";
Это может содержать пробелы?
Вместо этого рекомендую использовать boost :: lexical_cast.
candidates are: std::string std::to_string(long long int)
" - почему бы вам не попробовать передать его одному из типов кандидатов ???