Registreer FAQ Ledenlijst Berichten van vandaag


Ga terug   Scholieren.com forum / Technologie / Software & Hardware
Reageren
 
Topictools Zoek in deze topic
Oud 02-03-2007, 20:01
Sortjuh
Avatar van Sortjuh
Sortjuh is offline
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?
__________________
Sort zegt het en Sort is de baas. © Not for Sale | Hertog Jan.<3 | Stem BLANCO!! | ST!
Met citaat reageren
Advertentie
Oud 03-03-2007, 16:07
Verwijderd
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.
Met citaat reageren
Oud 03-03-2007, 16:20
Verwijderd
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?
Met citaat reageren
Advertentie
Reageren


Regels voor berichten
Je mag geen nieuwe topics starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit

Spring naar


Alle tijden zijn GMT +1. Het is nu 05:14.