Ошибка компиляции при использовании to_string в программе c ++

0

Чтобы получить точность и масштаб числа, я использую эту простую программу. Но при преобразовании числа в строку он дает ошибку компиляции.

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;
}

Что вызывает эту ошибку?

  • 1
    " candidates are: std::string std::to_string(long long int) " - почему бы вам не попробовать передать его одному из типов кандидатов ???
  • 0
    Это странно, я использовал ваш код, и он отлично работает!
Теги:
tostring

2 ответа

2
Лучший ответ

Первая ошибка std::to_string тем, что std::to_string - это функция С++ 11, а GCC по умолчанию компилируется в режиме С++ 03.

Вторая ошибка, когда вы используете правильный флаг, вероятно, связана с тем, что поддержка С++ 11 в GCC 4.4 (которую вы, кажется, используете) весьма минимальна. Как вы можете видеть сообщения об ошибках, компилятор показывает вам альтернативы, которые он имеет.

Кстати, вам не нужно вводить целые литералы в int, они имеют тип int по умолчанию. Возможно, вы захотите отдать его long double хотя это одна из допустимых перегрузок, и вам кажется, что вы хотите найти десятичную точку (код не будет работать так, как ожидалось, если в строке нет десятичной точки, например, при преобразовании целое число).

  • 0
    Спасибо за ваш быстрый ответ. с этими выходными данными 11 и 4. строковое значение = to_string (static_cast <long double> (1234.56)); Я не понимаю, почему value.length () в этом случае 11.
  • 0
    @DeveshAgrawal Попробуйте напечатать строку внутри кавычек, например, например, std::cout << "The string is \"" << value << "\"\n"; Это может содержать пробелы?
0

Вместо этого рекомендую использовать boost :: lexical_cast.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню