Saya membuat program pengingat kosakata kecil di mana kata-kata akan diucapkan kepada saya secara acak untuk artinya. Saya ingin menggunakan pustaka C ++ standar seperti yang dikatakan Bjarne Stroustroup kepada kami, tetapi saya telah menemukan masalah yang tampaknya aneh di luar gerbang.
Saya ingin mengubah long
integer menjadi std::string
agar dapat menyimpannya dalam file. Saya telah bekerja to_string()
untuk hal yang sama. Masalahnya adalah, ketika saya mengompilasinya dengan g ++ (versi 4.7.0 seperti yang disebutkan dalam flag --version), ia mengatakan:
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'
Program saya yang memberikan kesalahan ini adalah:
#include <string>
int main()
{
std::to_string(0);
return 0;
}
Tapi, saya tahu itu tidak mungkin karena perpustakaan msdn dengan jelas mengatakan itu ada dan pertanyaan sebelumnya tentang Stack Overflow (untuk g ++ versi 4.5) mengatakan bahwa itu dapat dihidupkan dengan -std=c++0x
flag. Apa yang saya lakukan salah?
libstdc++
sudah ketinggalan zaman?-std=c++11
atau lebih tinggi.Jawaban:
Ini adalah bug yang dikenal di bawah MinGW. Bugzilla yang relevan . Di bagian komentar Anda bisa mendapatkan tambalan untuk membuatnya berfungsi dengan MinGW.
Masalah ini telah diperbaiki di distro MinGW-w64 lebih tinggi dari GCC 4.8.0 yang disediakan oleh proyek MinGW-w64 . Terlepas dari namanya, proyek ini menyediakan toolchains untuk 32-bit bersama dengan 64-bit. The Nuwen MinGW distro juga memecahkan masalah ini.
sumber
std::to_string
bekerja dengan menginstal MinGW 4.8.1 (khusus,x32-4.8.1-posix-dwarf-rev5
) melalui MinGW-builds . Sebaliknya,to_string
lakukan tidak bekerja dengan MinGW 4.8.1 diinstal melalui baik "mingw-get" installer atau paket TDM-GCC.#define _GLIBCXX_USE_C99 1
masukC:\MinGW\lib\gcc\mingw32\4.8.1\include\c++\mingw32\bits\c++config.h
seperti yang dijelaskan di sinijangan lupa sertakan
#include <sstream>
sumber
std::to_string(0.75)
biasanya akan kembali"0.750000"
(format sprintf% d default) sementara ini akan kembali"0.75"
. Lihat di sini untuk alasan: stackoverflow.com/a/13686914/785171Seperti yang disarankan ini mungkin masalah dengan versi kompiler Anda.
Coba gunakan kode berikut untuk mengonversi a
long
menjadistd::string
:sumber
std::string
, Anda ingin menggunakannya.str()
.std::to_string(0.75)
biasanya akan kembali"0.750000"
(format sprintf% d default) sementara ini akan kembali"0.75"
. Lihat di sini untuk alasan: stackoverflow.com/a/13686914/785171Gunakan fungsi ini ...
sumber
std::to_string(0.75)
biasanya akan kembali"0.750000"
(format sprintf% d default) sementara ini akan kembali"0.75"
. Lihat di sini untuk alasan: stackoverflow.com/a/13686914/785171to_string adalah masalah saat ini dengan Cygwin
Inilah jawaban baru untuk sebuah utas lama. Yang baru memang muncul tetapi cepat dibatalkan, Cygwin: g ++ 5.2: 'to_string' bukan anggota 'std' .
Sayang sekali, mungkin kita akan mendapat jawaban yang diperbarui. Menurut @Alex, Cygwin g ++ 5.2 masih belum berfungsi pada 3 November 2015.
Pada 16 Januari 2015 Corinna Vinschen, seorang pengelola Cygwin di Red Hat mengatakan masalahnya adalah kekurangan dari newlib. Ini tidak mendukung fungsi ganda paling lama dan karenanya tidak menyadari C99.
Red Hat adalah,
Pada 25 Oktober 2015 Corrine juga mengatakan ,
Jadi begitulah. Mungkin salah satu dari kita yang memiliki pengetahuan, dan waktu, dapat berkontribusi dan menjadi pahlawan.
Newlib ada di sini .
sumber
Ubah standar C ++ standar
Kesalahan Dari (COMPILE FILE FAILED): 'to_string' bukan anggota dari 'std'
To (COMPILE FILE SUCCESSFUL)
Diuji pada Cygwin G ++ (GCC) 5.4.0
sumber
to_string () hanya ada di c ++ 11 jadi jika versi c ++ kurang gunakan beberapa metode alternatif seperti sprintf atau ostringstream
sumber
Faktanya adalah bahwa libstdc ++ sebenarnya didukung
std::to_string
dalam target * -w64-mingw32 sejak 4.8.0 . Namun, ini tidak termasuk dukungan untuk MinGW.org, Cygwin dan varian (mis. * -Pc-msys dari MSYS2). Lihat juga https://cygwin.com/ml/cygwin/2015-01/msg00245.html .Saya telah menerapkan solusi sebelum bug diselesaikan untuk MinGW-w64. Menjadi berbeda dengan kode pada jawaban lain, ini adalah mimic ke libstdc ++ (mungkin). Itu tidak memerlukan konstruksi aliran string tetapi tergantung pada ekstensi libstdc ++. Bahkan sekarang saya menggunakan target mingw-w64 di Windows, masih berfungsi dengan baik untuk beberapa target lainnya (selama
long double
fungsi tidak digunakan).sumber
Bagi siapa pun yang bertanya-tanya mengapa ini terjadi pada Android, itu mungkin karena Anda menggunakan pustaka c ++ standar yang salah. Coba ubah pustaka c ++ di build.gradle Anda dari
gnustl_static
menjadic++_static
dan standar c ++ di CMakeLists.txt Anda dari-std=gnu++11
menjadi-std=c++11
sumber
Jika kita menggunakan solusi template-light (seperti yang ditunjukkan di atas) seperti berikut:
Sayangnya, dalam beberapa kasus kita akan mengalami masalah. Misalnya, untuk anggota const statis :
hpp
cpp
Dan menghubungkan:
Berikut adalah salah satu cara untuk menyelesaikan masalah (tambahkan ke tipe size_t ):
HTH.
sumber
di codeblock pergi ke pengaturan -> pengaturan compiler -> flag compiler -> pilih std c ++ 11 selesai. Saya memiliki masalah yang sama ... sekarang berhasil!
sumber
Ini terjadi pada saya juga, saya hanya menulis fungsi cepat daripada khawatir tentang memperbarui kompiler saya.
sumber
ones_char = '0' + number % 10;