Gecrosspost, maar misschien krijg ik hier wat meer reacties.
Ik heb een class Dierentuin met daarin een map waarin werknevers opgeslagen worden. Er is een functie Dierentuin:
verzichtWerknemers() 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:
verzichtWerknemers();
Als ik regel 336 vervang door:
out << Dierentuin:
verzichtWerknemers();
zegt ie:
"cannot call member function 'void Dierentuin:
verzichtWerknemers()' 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?