Dlaczego mi się to nie cout
string
podoba:
string text ;
text = WordList[i].substr(0,20) ;
cout << "String is : " << text << endl ;
Kiedy to robię, pojawia się następujący błąd:
Błąd 2, błąd C2679: binarny „<<”: nie znaleziono operatora pobierającego prawostronny operand typu „std :: string” (lub nie ma akceptowalnej konwersji) c: \ users \ mollasadra \ documents \ visual studio 2008 \ projekty \ barnamec \ barnamec \ barnamec.cpp 67 barnamec **
To niesamowite, że nawet to nie działa:
string text ;
text = "hello" ;
cout << "String is : " << text << endl ;
#include <iostream>
?Odpowiedzi:
Musisz uwzględnić
źródło
using namespace std
lubusing std::cout
;using std::endl
;string text;
edycji (dodany błąd) mówi, że to nie jest problem, ale brakującystring
nagłówek.std::basic_string
pobiera definicję klasy (ponieważ pośrednio zawierają zdefiniowany w implementacji nagłówek <xstring> ( nigdy nie zawierają tego bezpośrednio )). Chociaż umożliwia to użycie klasy ciągów, odpowiednieoperator<<
są zdefiniowane w samym nagłówku <string>, więc należy to uwzględnić ręcznie. Opierając się również na innych nagłówkach, aby pośrednio uwzględnić definicjęstd::basic_string
prac w VC ++, ale nie będzie to działać na wszystkich kompilatorach.Musisz
std
jakoś odwołać się do przestrzeni nazw cout . Na przykład wstawnad definicją funkcji lub plikiem.
źródło
Z Twoim kodem jest kilka problemów:
WordList
nie jest nigdzie zdefiniowany. Powinieneś to zdefiniować przed użyciem.#include <string>
zanim będziesz mógł użyć klasy string i iostream przed użyciemcout
lubendl
.string
,cout
Aendl
na żywo wstd
przestrzeni nazw, więc nie można uzyskać do nich dostęp bez poprzedzania ichstd::
chyba użyćusing
dyrektywy w celu dostosowania ich do zakresu pierwszej kolejności.źródło
Powyższe odpowiedzi są dobre, ale jeśli nie chcesz dodawać ciągów include, możesz użyć następujących
źródło
Użyj c_str (), aby przekonwertować std :: string na const char *.
źródło
Nie musisz się odwoływać
std::cout
anistd::endl
wyraźnie.Oba są uwzględnione w
namespace std
.using namespace std
Zamiast używać operatora rozdzielczości zakresu, za::
każdym razem jest łatwiejsze i czystsze.źródło
Jeśli używasz systemu Linux, musisz dodać
using namespace std;
Poniżej nagłówki
W przypadku systemu Windows upewnij się, że nagłówki zostały umieszczone poprawnie
#include<iostream.h>
#include<string.h>
Zobacz to działa idealnie.
źródło
using namespace std;
nie ma nic wspólnego z docelowym systemem operacyjnymlinux
. Podobnie, dodanie.h
do dołączeń nie ma nic wspólnego z docelowym systemem operacyjnym będącym oknami#include <iostream>
i#include <string>
będzie działać w systemie Windows.