Waarom kan ik geen string tellen?

Waarom ik niet kan coutstringop deze manier:

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

Als ik dit doe, krijg ik de volgende foutmelding:

Fout 2 fout C2679: binair ‘<<‘ : geen operator gevonden die een rechter operand van het type ‘std::string’ nodig heeft (of er is geen acceptabele conversie) c:\users\mollasadra\documents\visual studio 2008\projects\barnamec\barnamec\barnamec.cpp 67 barnamec**

Het is verbazingwekkend dat zelfs dit niet werkt:

string text ;
text = "hello"  ;
cout << "String is  : " << text << endl ;

Antwoord 1, autoriteit 100%

Je moet

. opnemen

#include <string>
#include <iostream>

Antwoord 2, autoriteit 4%

Je moet op de een of andere manier verwijzen naar de naamruimte stdvan de cout. Voeg bijvoorbeeld

. in

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

bovenop uw functiedefinitie of het bestand.


Antwoord 3, autoriteit 2%

Er zijn verschillende problemen met uw code:

  1. WordListis nergens gedefinieerd. U moet het definiëren voordat u het gebruikt.
  2. Je kunt niet zomaar code schrijven buiten een functie als deze. Je moet het in een functie plaatsen.
  3. Je moet #include <string>voordat je de string class en iostream kunt gebruiken voordat je coutof endlgebruikt.
  4. string, couten endlleven in de stdnaamruimte, dus je kunt ze niet openen zonder prefix ze met std::tenzij u de instructie usinggebruikt om ze eerst in het bereik te brengen.

Antwoord 4

Bovenstaande antwoorden zijn goed, maar als u geen tekenreeks wilt toevoegen, kunt u het volgende gebruiken

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

Antwoord 5

Gebruik c_str() om de std::string te converteren naar const char *.

cout << "String is  : " << text.c_str() << endl ;

Antwoord 6

Je hoeft niet expliciet naar std::coutof std::endlte verwijzen.
Ze zijn beide opgenomen in de using namespace std. using namespace stdgebruiken in plaats van scope resolution operator ::elke keer dat het makkelijker en schoner wordt.

#include<iostream>
#include<string>
using namespace std;

Antwoord 7

Als je een Linux-systeem gebruikt, moet je toevoegen

using namespace std;

Onder kopjes

Als Windows, zorg er dan voor dat je de headers correct plaatst
#include<iostream.h>

#include<string.h>

Zie dit, het werkt perfect.

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

Other episodes