Я делаю небольшую программу для запоминания словарного запаса, в которой слова будут мелькать на меня случайно для значений. Я хочу использовать стандартную библиотеку C ++, как говорит нам Бьярно Страуструп, но я столкнулся с на первый взгляд странной проблемой прямо за воротами.
Я хочу изменить long
целое число, std::string
чтобы иметь возможность хранить его в файле. Я нанял to_string()
для того же. Проблема в том, что когда я компилирую его с помощью g ++ (версия 4.7.0, как указано в флаге - inversion), он говорит:
PS C:\Users\Anurag\SkyDrive\College\Programs> g++ -std=c++0x ttd.cpp
ttd.cpp: In function 'int main()':
ttd.cpp:11:2: error: 'to_string' is not a member of 'std'
Моя программа, которая выдает эту ошибку:
#include <string>
int main()
{
std::to_string(0);
return 0;
}
Но я знаю, что этого не может быть, потому что библиотека msdn ясно говорит, что она существует, и в предыдущем вопросе о переполнении стека (для g ++ версии 4.5) говорится, что его можно включить с помощью -std=c++0x
флага. Что я делаю не так?
libstdc++
устарела?-std=c++11
или выше.Ответы:
Это известная ошибка в MinGW. Соответствующий Bugzilla . В разделе комментариев вы можете получить патч, чтобы он работал с MinGW.
Эта проблема была исправлена в дистрибутивах MinGW-w64 выше GCC 4.8.0, предоставленных проектом MinGW-w64 . Несмотря на название, проект предоставляет наборы инструментов для 32-битных и 64-битных систем. Дистрибутив Nuwen MinGW также решает эту проблему.
источник
std::to_string
к работе, установив MinGW 4.8.1 (в частности,x32-4.8.1-posix-dwarf-rev5
) через MinGW-builds . В отличие от этого ,to_string
сделал не работа с MinGW 4.8.1 установлен либо через «MinGW-получить» установщиком или пакет TDM-GCC.#define _GLIBCXX_USE_C99 1
в ,C:\MinGW\lib\gcc\mingw32\4.8.1\include\c++\mingw32\bits\c++config.h
как описано здесьне забудьте включить
#include <sstream>
источник
std::to_string(0.75)
обычно возвращается"0.750000"
(формат sprintf% d по умолчанию), в то время как он возвращается"0.75"
. См. Здесь причину: stackoverflow.com/a/13686914/785171Как и предполагалось, это может быть проблемой с версией вашего компилятора.
Попробуйте использовать следующий код для преобразования
long
вstd::string
:источник
std::string
, вы хотите использовать.str()
вместо этого.std::to_string(0.75)
обычно возвращается"0.750000"
(формат sprintf% d по умолчанию), в то время как он возвращается"0.75"
. См. Здесь причину: stackoverflow.com/a/13686914/785171Используйте эту функцию ...
источник
std::to_string(0.75)
обычно возвращается"0.750000"
(формат sprintf% d по умолчанию), в то время как он возвращается"0.75"
. См. Здесь причину: stackoverflow.com/a/13686914/785171to_string - текущая проблема с Cygwin
Вот новый ответ на старый поток. Новый появился, но был быстро отменен, Cygwin: g ++ 5.2: «to_string» не является членом «std» .
Жаль, может быть, мы получили бы обновленный ответ. Согласно @Alex, Cygwin g ++ 5.2 по-прежнему не работает по состоянию на 3 ноября 2015 года.
16 января 2015 года Corinna Vinschen, сопровождающий Cygwin в Red Hat, сказала, что проблема была в недостатке newlib. Он не поддерживает большинство длинных двойных функций и поэтому не поддерживает C99.
Red Hat есть,
25 октября 2015 года Коррин также сказала :
Так что у нас это. Может быть, тот из нас, кто обладает знаниями и временем, сможет внести свой вклад и стать героем.
Ньюлиб здесь .
источник
Изменить стандарт C ++ по умолчанию
Ошибка From (COMPILE FILE FAILED): to_string не является членом std
Кому (ФАЙЛ УСПЕШНЫЙ)
Проверено на Cygwin G ++ (GCC) 5.4.0
источник
to_string () присутствует только в c ++ 11, поэтому, если версия c ++ меньше, используйте некоторые альтернативные методы, такие как sprintf или ostringstream
источник
Дело в том, что libstdc ++ фактически поддерживается
std::to_string
в целях * -w64-mingw32 начиная с 4.8.0 . Однако это не включает поддержку MinGW.org, Cygwin и вариантов (например, * -pc-msys из MSYS2). Смотрите также https://cygwin.com/ml/cygwin/2015-01/msg00245.html .Я реализовал обходной путь до устранения ошибки для MinGW-w64. В отличие от кода в других ответах, это похоже на libstdc ++ (насколько это возможно). Он не требует построения потока строк, но зависит от расширений libstdc ++. Даже сейчас я использую цели mingw-w64 в Windows, но она хорошо работает и для нескольких других целей (если
long double
функции не используются).источник
Для всех, кто интересуется, почему это происходит на Android, возможно, потому, что вы используете неправильную стандартную библиотеку c ++. Попробуйте изменить библиотеку c ++ в вашем build.gradle с
gnustl_static
наc++_static
и стандарт c ++ в вашем CMakeLists.txt с-std=gnu++11
на-std=c++11
источник
Если мы используем template-light-solution (как показано выше), как показано ниже:
К сожалению, у нас будут проблемы в некоторых случаях. Например, для статических членов const :
HPP
CPP
И ссылки:
Вот один из способов решения проблемы (добавьте к типу size_t ):
НТН.
источник
в кодовых блоках перейдите к настройке -> настройка компилятора -> флаг компилятора -> выбрать стандарт c ++ 11 готово. У меня была такая же проблема ... теперь она работает!
источник
Это также случилось со мной, я просто написал быструю функцию, а не беспокоился об обновлении своего компилятора.
источник
ones_char = '0' + number % 10;