multiset<struct> - Zugriff auf Elemente?



  • Hallo allerseits,

    ich habe wie die Überschrift schon sagt folgendes in einem H-File erstellt:

    struct dataStructure
    	{
    		int trainId;
    		int stationId;
    		int arrivalHour;
    		int arrivalMinute;
    		int descentHour;
    		int descentMinute;
    		int countDropout;
    		int countNewcomer;
    	};
    
    	/*
    	 * Returns true, if the a entry is smaller than b.
    	 */
    	struct comp
    	{
    		bool operator() (const dataStructure a, const dataStructure b) const
    		{
    			return a.trainId < b.trainId
    				   &&
    				   a.descentHour * 60 + a.descentMinute <
    				   b.descentHour * 60 + b.descentMinute;
    		}
    	};
    
    	multiset<dataStructure, comp> records;
    

    Die Elemente will ich jetzt Ausgeben bzw. auf sie zugreifen, in einem cpp File, die Befüllung mit Daten funktioniert - zumindest Comiliert er (ohne die Ausgabe) einwandfrei.

    Nun habe ich keine Ahnung was ich noch machen soll, ich bin mir sicher das es am Iterator liegt... hier meine Ausgabe-Versuche:

    for(multiset<dataStructure>::iterator i = records.begin(); i != records.end(); i++)
    			cout << *i.trainId << " " << *i.stationId << " " << *i.arrivalHour << " " << 
                            *i.arrivalMinute << " " << *i.descentHour << " " << *i.descentMinute << " " << 
                            *i.countDropout << " " << *i.countNewcomer << endl;
    
    for(unsigned int i = 0; i < records.size(); i++)
    			cout << records[i].trainId << " " << records[i].stationId << " " << records[i].arrivalHour << " " << 
                            records[i].arrivalMinute << " " << records[i].descentHour << " " << records[i].descentMinute << " " << 
                            records[i].countDropout << " " << records[i].countNewcomer << endl;
    

    Habe schon die Suchfunktion, Google und einige Leute gefragt - Lösungen gab es keine :(, so langsam bin ich am verzweifeln. Vllt liegts auch daran, das ich in C++ erst 1 1/2 Wochen schreibe und noch ein Neuling bin.

    Lg
    Copy



  • Was genau sagt denn dein Compiler zu deinen Versuchen? Wenn ich raten müsste, würde ich sagen, daß er etwas von inkompatiblen Typen sagt - multiset<dataStructure,comp>::iterator ist etwas anderes als multiset<dataStructur>::iterator (letzteres dürfte mangels Vergleichsoperator nicht einmal gültig sein).



  • I dunno, hier:
    multiset<dataStructure>::iterator

    ../timetable.cpp:88:15: error: ‘struct std::multiset<readNsort::dataStructure>::iterator’ has no member named ‘trainId’
    ../timetable.cpp:88:36: error: ‘struct std::multiset<readNsort::dataStructure>::iterator’ has no member named ‘stationId’
    ../timetable.cpp:88:59: error: ‘struct std::multiset<readNsort::dataStructure>::iterator’ has no member named ‘arrivalHour’
    ../timetable.cpp:88:84: error: ‘struct std::multiset<readNsort::dataStructure>::iterator’ has no member named ‘arrivalMinute’
    ../timetable.cpp:88:111: error: ‘struct std::multiset<readNsort::dataStructure>::iterator’ has no member named ‘descentHour’
    ../timetable.cpp:88:136: error: ‘struct std::multiset<readNsort::dataStructure>::iterator’ has no member named ‘descentMinute’
    ../timetable.cpp:88:163: error: ‘struct std::multiset<readNsort::dataStructure>::iterator’ has no member named ‘countDropout’
    ../timetable.cpp:88:189: error: ‘struct std::multiset<readNsort::dataStructure>::iterator’ has no member named ‘countNewcomer’
    

    und multiset<dataStructure, comp>::iterator

    ../timetable.cpp:88:15: error: ‘struct std::multiset<readNsort::dataStructure, readNsort::comp>::iterator’ has no member named ‘trainId’
    ../timetable.cpp:88:36: error: ‘struct std::multiset<readNsort::dataStructure, readNsort::comp>::iterator’ has no member named ‘stationId’
    ../timetable.cpp:88:59: error: ‘struct std::multiset<readNsort::dataStructure, readNsort::comp>::iterator’ has no member named ‘arrivalHour’
    ../timetable.cpp:88:84: error: ‘struct std::multiset<readNsort::dataStructure, readNsort::comp>::iterator’ has no member named ‘arrivalMinute’
    ../timetable.cpp:88:111: error: ‘struct std::multiset<readNsort::dataStructure, readNsort::comp>::iterator’ has no member named ‘descentHour’
    ../timetable.cpp:88:136: error: ‘struct std::multiset<readNsort::dataStructure, readNsort::comp>::iterator’ has no member named ‘descentMinute’
    ../timetable.cpp:88:163: error: ‘struct std::multiset<readNsort::dataStructure, readNsort::comp>::iterator’ has no member named ‘countDropout’
    ../timetable.cpp:88:189: error: ‘struct std::multiset<readNsort::dataStructure, readNsort::comp>::iterator’ has no member named ‘countNewcomer’
    

    /edit: Das ganze ist in ner

    class readNsort
    {
    private:
    ...
    };
    

    deklariert.



  • Da hast du wohl noch ein Problem mit der Operator-Rangfolge - der Memberzugriff steht höher als die Dereferenzierung, deshalb mußt du das klammern als (*i).trainId (oder du verwendest gleich i->trainId ).



  • Potzblitz vielen Dank, es geht - wunderbar 😃 (Und ich habe schon 2 h daran herumprobiert ;))


Anmelden zum Antworten