Erstellen eines Iterators durch eine std::list in constanter Methode nicht möglich

Neonof

Mitglied
Hallo,
ich sitze gerade an einer c++ Hausaufgabe und verstehe nicht, weshalb die Erstellung eines Iterators Probleme bereitet.

Header / Klassendefinition
C++:
#ifndef _WEATHERSTATIONS_
#define _WEATHERSTATIONS_

#include <list>
#include "WeatherStation.h"

class WeatherStations {
public:

    // Copy constructor
    WeatherStations(WeatherStations const &ws);

    // Assignment operator
    WeatherStations &operator =(WeatherStations const &ws);

    // Inserts by name a new weather station.
    // If a weather station already exists, it is replaced.
    void Add(WeatherStation const& ws);

    // Removes a weather station
    bool Remove(WeatherStation const& ws);

    // Returns the number of weather stations
    size_t GetNrStations() const;

    // Prints all weather stations
    void PrintAll(std::ostream& out) const;

    // Print coldest/warmest weather station
    void PrintColdest(std::ostream& out) const;
    void PrintWarmest(std::ostream& out) const;

private:
    // member variables
    size_t maxStations;
    size_t contain;
  
    std::list<WeatherStation> stations;
};

#endif

Printfunktion im cpp-File:
C++:
void WeatherStations::PrintAll(std::ostream & out) const
{
    for (std::list<WeatherStation>::iterator iter = stations.begin(); iter != stations.end(); iter++)
    {
        iter->Print(out);
    }
}

Visual Studio markiert mir folgenden Fehler:
1558260564091.png

Ich weiß, dass konstante Methoden die Membervariablen des Klassenobjektes nicht verändern dürfen, weshalb die Verwendung für Ausgabefunktionen ja auch Sinn macht. Aber hier wird ja auch nur ein temporärer Iterator in der Methode erzeugt. Scheinbar gibt es aber dabei schon das Problem. Nehme ich das const am Ende der Funktionsdeklaration weg, funktioniert es - ist aber natürlich nicht die Aufgabe.

Danke schon einmal für Antworten!

Grüße,
Neonof
 
Lösung
Vielleicht wisst ihr das aus Erfahrung mit Visual Studio auch gleich? ^^'
Zur Abwechslung ist das kein Problem von VS, sondern C++: Die Headerdatei wird mehr als einmal gelesen, daher wird operator== mehrfach definiert. Ein "inline" davor wie bei operator>> oder direkt in die Klasse integrieren sollte das Problem lösen (inline sagt dem Compiler, dass dasselbe Symbol (mit identischer Definition) mehrmals vorkommen darf)

Gruss
cwriter
Ich hab die Funktion in die Klasse eingebunden und jetzt funktioniert alles (y)
Danke für die ausführlichen Erklärungen!

Grüße,
Erakla
 
Zurück