Mengapa saya tidak bisa membuat string?

143

Kenapa saya tidak bisa cout stringsuka ini:

string text ;
text = WordList[i].substr(0,20) ;
cout << "String is  : " << text << endl ;

Ketika saya melakukan ini, saya mendapatkan kesalahan berikut:

Kesalahan 2 kesalahan C2679: biner '<<': tidak ada operator yang menemukan operan tangan kanan dari tipe 'std :: string' (atau tidak ada konversi yang dapat diterima) c: \ users \ mollasadra \ dokumen \ visual studio 2008 \ proyek \ barnamec \ barnamec \ barnamec.cpp 67 barnamec **

Sungguh menakjubkan, bahkan ini pun tidak berfungsi:

string text ;
text = "hello"  ;
cout << "String is  : " << text << endl ;
Ata
sumber
Bisakah Anda mengedit dalam pesan kesalahan?
Troyen
1
Benarkah #include <iostream>?
Konerak
tidak cukup info. apa kesalahannya
alexD
Saya sudah melakukan itu. tapi sekali lagi, saya punya masalah.
Ata
Bisakah Anda memposting seluruh file? Kami tidak tahu apakah Anda memanggil ini dalam suatu fungsi, jika Anda memasukkan hal-hal yang benar, dll ...
Konerak

Jawaban:

241

Anda harus memasukkan

#include <string>
#include <iostream>
Kiril Kirov
sumber
7
dan juga using namespace stdatau using std::cout; using std::endl;
fardjad
2
Ya, tapi saya kira itu sudah termasuk, karena tidak ada kesalahan pada string text;juga edit (tambah kesalahan) mengatakan, bahwa ini bukan masalah tetapi stringheader yang hilang .
Kiril Kirov
57
+1: Banyak header STL dalam Visual C ++ (termasuk <iostream>) yang menarik definisi std::basic_stringkelas (karena mereka secara tidak langsung menyertakan header <xstring> yang didefinisikan implementasi ( tidak pernah menyertakan itu secara langsung )). Meskipun itu memungkinkan Anda untuk menggunakan kelas string, yang relevan operator<<didefinisikan di header <string> itu sendiri, jadi Anda harus memasukkannya secara manual. Juga mengandalkan header lain untuk secara tidak langsung memasukkan definisi std::basic_stringkarya dalam VC ++, tetapi tidak akan bekerja pada semua kompiler.
Sven
6
Sven- Komentar Anda mengagumkan! Saya memiliki masalah yang sama dengan penanya ini, kata kompiler operator >> tidak didefinisikan untuk tipe std :: cin dan std :: string. Ternyata saya memiliki <iostream> tetapi telah melupakan <string>. Saya terbiasa bekerja di linux w / gcc yang akan mengeluh bahwa std :: string tidak didefinisikan. Komentar Anda menjelaskan dengan sempurna mengapa kami malah mendapat keluhan tentang operator. Terima kasih!!
Daniel Goldfarb
2
Ini bekerja. Saya melewatkan baris #include <string> dalam kode saya. Terima kasih.
Hao Nguyen
11

Anda perlu merujuk namespace cout stdentah bagaimana. Misalnya, masukkan

using std::cout;
using std::endl;

di atas definisi fungsi Anda, atau file.

nperson325681
sumber
6

Ada beberapa masalah dengan kode Anda:

  1. WordListtidak didefinisikan di mana pun. Anda harus mendefinisikannya sebelum menggunakannya.
  2. Anda tidak bisa hanya menulis kode di luar fungsi seperti ini. Anda harus memasukkannya ke dalam fungsi.
  3. Anda perlu #include <string>sebelum Anda dapat menggunakan kelas string dan iostream sebelum Anda menggunakan coutatau endl.
  4. string, coutdan endltinggal di stdnamespace, jadi Anda tidak dapat mengaksesnya tanpa awalan, std::kecuali jika Anda menggunakan usingarahan untuk membawanya ke ruang lingkup terlebih dahulu.
sepp2k
sumber
tidak ada dari mereka yang bekerja untuk saya, sepertinya masalah dengan substr
Ata
1

Jawaban di atas baik tetapi jika Anda tidak ingin menambahkan string, Anda dapat menggunakan yang berikut ini

ostream& operator<<(ostream& os, string& msg)
{
os<<msg.c_str();

return os;
}
Maheswar Reddy
sumber
0

Gunakan c_str () untuk mengonversi std :: string ke const char *.

cout << "String is  : " << text.c_str() << endl ;
Anthony.
sumber
-1

Anda tidak perlu referensi std::coutatau std::endlsecara eksplisit.
Keduanya termasuk dalam namespace std. using namespace stddaripada menggunakan operator resolusi lingkup ::setiap kali membuat lebih mudah dan lebih bersih.

#include<iostream>
#include<string>
using namespace std;
Ash Ghal
sumber
5
Selamat datang di StackOverflow, Anda mungkin tidak memperhatikan tetapi ini telah dialamatkan di salah satu komentar dari jawaban yang diterima.
Andon M. Coleman
-3

Jika Anda menggunakan sistem linux maka Anda perlu menambahkan

using namespace std;

Tajuk di bawah

Jika windows maka pastikan Anda memasukkan header dengan benar #include<iostream.h>

#include<string.h>

Lihat ini berfungsi dengan baik.

#include <iostream>
#include <string>

int main ()
{
std::string str="We think in generalities, but we live in details.";
                                       // (quoting Alfred N. Whitehead)

  std::string str2 = str.substr (3,5);     // "think"

   std::size_t pos = str.find("live");      // position of "live" in str

  std::string str3 = str.substr (pos);     
// get from "live" to the end

  std::cout << str2 << ' ' << str3 << '\n';

  return 0;
}
pratikpchpr
sumber
using namespace std;tidak ada hubungannya dengan target os being linux. Demikian pula, menambahkan .hke menyertakan tidak ada hubungannya dengan target os menjadi windows, #include <iostream>dan #include <string>akan berfungsi pada windows.
StaticBeagle