iterator <zeiger>



  • hallo

    ich habe eine Klasse

    class Frau
    {
    public:
    
    	void gebe_alle_aus(void);
    
    	string eigen_name;
    
    	vector <Mann*> man_list;
    
    	vector <Mann*>::iterator man_it;
    
    };
    
    void Frau::gebe_alle_aus(void)
    {
    	man_it = man_list.begin();
    	string vgl_name;
    
    	for (unsigned int i = 0; i < man_list.size(); i++) {
    
    		vgl_name = ((*man_it)->Frau);  //hier scheint der   
    		cout << vgl_name << endl;      //fehler zu sein
    		man_it++;
    	}
    
    }
    

    Fehler:
    error C2679: Binärer Operator '<<': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'std::string' akzeptiert (oder keine geeignete Konvertierung möglich)
    1> c:\program files\microsoft visual studio 9.0\vc\include\ostream(653): kann 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)' sein
    1> with

    /edit pumuckl: ich hab mal die BB-Codes aktiviert, damit das mit den cpp-Tags auch fruchtet 😉



  • Welche Header hast du eingebunden? Für die Ausgabe von std::string sind <iostream> und <string> vonnöten.



  • ich hatte #include <string> vergessen. ich dachte immer der string ist in iostream drinnen und dazu muss man das namespace std einbinden?



  • hansigarten2 schrieb:

    ich hatte #include <string> vergessen. ich dachte immer der string ist in iostream drinnen und dazu muss man das namespace std einbinden?

    Das muss nicht sein, kann aber duchaus sein, dass dein Compiler das schluckt. Allerdings ist es nur Standardkonform, dass, wenn du std::string benutzt, dann musst du auch #include<string> machen.

    Den Namensraum kannst du entweder durch ein using namespace bekannt machen, oder durch die explizite Namensraumangabe durch den ::-Operator



  • Kleiner Tipp: Der Imperativ von "geben" lautet "gib".
    Ist leicht zu merken: Es heißt ja Imperativ und nicht Emperativ. 😉
    (ebenso "hilf, iß, ...." aber nicht "mirk Dir das!" 😉 )

    Gruß,

    Simon2.



  • Das halte ich für ein GerIcht, ähh.. Gerücht. 😉



  • thx 4 help



  • hansigarten2 schrieb:

    ich hatte #include <string> vergessen. ich dachte immer der string ist in iostream drinnen und dazu muss man das namespace std einbinden?

    <iostream> deklariert eventuell std::string, allerdings sind nur im <string> auch alle zugehörigen Funktionen mit dabei. Die Frage mit dem Namespace std klingt irgendwie seltsam. Nur für den Fall: cout usw. sind wie string im namespace std zu finden. Solltest du diesen Namespace nicht in irgendeiner Weise erwähnt haben, dann lässt das darauf schließen, dass du eventuell <iostream**.h**> statt <iostream> eingebunden hast. Sollte das der Fall sein, korrigiere das am Besten gleich und entsorge das Buch in dem noch <iostream.h> steht. (Der Header ist seit 11 Jahren veraltet udn wird inzwischen von einer ganzen Reihe von Compilern nicht mehr unterstützt)


Anmelden zum Antworten