Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Software & Hardware (https://forum.scholieren.com/forumdisplay.php?f=20)
-   -   [C++] Overloaden van de << operator. (https://forum.scholieren.com/showthread.php?t=1550480)

Sortjuh 02-03-2007 20:01

[C++] Overloaden van de << operator.
 
Gecrosspost, maar misschien krijg ik hier wat meer reacties. :p

Ik heb een class Dierentuin met daarin een map waarin werknevers opgeslagen worden. Er is een functie Dierentuin::overzichtWerknemers() die over de map itereert en alle data op het scherm tovert.

Er is ook een Main file van waaruit menuopties gekozen kunnen worden.

Nu moet ik de Main file zo aanpassen dat cout << *artis werkt. De code is als volgt:

Code:

//Main.cc
#include <iostream>
#include "Dierentuin.h"

int main() {
  Dierentuin *artis = new Dierentuin("Artis");
  cout << *artis;
}

Nu heb ik het volgende gedaan om << te overloaden:

Code:

//Dierentuin.h

class Dierentuin {
  friend ostream& operator <<(ostream &out, const Dierentuin &d);
  public:
    //
    void overzichtWerknemers();
  private:
    //
    map<int, Werknemer *> * werknemers;
}

Code:

//Dierentuin.cc
Dierentuin::Dierentuin(string naam) {
  werknemers = new map<int, Werknemer *>;
}

//Code

void Dierentuin::overzichtWerknemers() {
  cout << "Overzicht van de werknemers\n";
  for(map<int, Werknemer *>::iterator iter = werknemers->begin(); iter!= werknemers->end(); ++iter) {
    cout << iter->first << "\t";
    iter->second->drukaf();
  }
}

//Meer code

ostream& operator <<(ostream& out, Dierentuin &d) {
  out <<d.overzichtWerknemers();
  return out;
}

Verder is de methode drukaf() virtueel gedeclareerd in de Werknemer basis class en dus geïmplementeerd in de subclasses van Werknemer (in dit geval Administrateur, Oppasser en Manager). Van alle methoden is de terugkeer een void.

Ik krijg de volgende (samengevatte) compilererror:
Dierentuin.cc:336: error: no match for 'operator<<' in 'out << ((Dierentuin*)d)->Dierentuin::overzichtWerknemers();

Als ik regel 336 vervang door:

out << Dierentuin::overzichtWerknemers();

zegt ie:

"cannot call member function 'void Dierentuin::overzichtWerknemers()' without object".

M.A.W.: Ik zit dus een beetje vast. Enig idee hoe ik dit kan wijzigen zodat die wel netjes de output laat zien met de huidige structuur?

12Trix 03-03-2007 16:07

Ben niet zo erg actief met C++ hoor, maar is het misschien zo dat er geen spatie tussen "operator" en "<<" moet? Is een grote gok.

Edit:
http://www.cs.caltech.edu/courses/cs...e/cpp-ops.html

Volgens mij wel een spatie ja.

12Trix 03-03-2007 16:20

Kan het verder ook zo zijn dat je bij de operator functie niet moet hebben:
Dierentuin &d

Maar gewoon:
Dierentuin d

Want als je doet:
Dierentuin *artis = new Dierentuin("Artis");

Levert *artis dan niet gewoon een Dierentuin object op?


Alle tijden zijn GMT +1. Het is nu 16:50.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.