STL List mit Zeigern sortieren
-
Hallo,
ich habe eine STL List die mit Zeigern auf Objekte gefüllt ist.
Wie kann ich diese nun sortieren?list<Word *> wordIndex; //Definition der Liste .. Word *newWord = new Akronym(); wordIndex.push_back(newWord); //Element eingfügen ... wordIndex.sort(sortMethod); //sortieren über Methode wordIndex.sort(); //bzw. ohne methode ... bool sortMethod(const Word * lhs, const Word * rhs) { return true; //Sortierung... }Die Sortiermethode hab ich über die Klasse geschrieben:
bool sortMethod(const Word * lhs, const Word * rhs) { return true; } class Verwaltungsklasse{}Mit Strings konnte ich meine Liste ganz einfach über die Sortierfunktion sortieren lassen.
Mit Zeigern funktioniert das leider nicht mehr... Kann mir jemand ein Tipp geben?Vielen Dank im Voraus.
Compiler gibt mir folgendes:
build/Debug/Cygwin_4.x-Windows/main.o: In function\_Z10sortMethodPK4WordS1_': /cygdrive/c/Users/Manuel/Documents/NetBeansProjects/nitsch\_klausur\_wortindex/IndexVerwaltung.h:21: multiple definition ofsortMethod(Word const*, Word const*)'
build/Debug/Cygwin_4.x-Windows/IndexVerwaltung.o:/cygdrive/c/Users/Manuel/Documents/NetBeansProjects/nitsch_klausur_wortindex/IndexVerwaltung.h:21: first defined here
collect2: ld returned 1 exit status
-
Wenn du den Fehler mal gelesen hättest anstatt vor Schreck vom Stuhl zu kippen, hättest du bemerkt, dass er einfach nur bemängelt die Definition zwei mal gefunden zu haben. Wahrscheinlich hast du die Definition in einem Header. Du kannst die Definition entweder in eine .cpp auslagern, oder sie inline machen.
void foo(); // Header void foo() {} // .cpp // oder inline void foo() {} // Header
-
Manuel schrieb:
Die Sortiermethode hab ich über die Klasse geschrieben:
Warum findest Du das bemerkenswert?
Warum blanke Zeiger?
#include <memory> #include <list> #include <string> #include <iostream> bool compare( std::shared_ptr< std::string > lhs, std::shared_ptr< std::string > rhs ) { return *lhs < *rhs; } int main() { std::list< std::shared_ptr< std::string > > index; index.push_back( std::shared_ptr< std::string >( new std::string( "C" ) ) ); index.push_back( std::shared_ptr< std::string >( new std::string( "E" ) ) ); index.push_back( std::shared_ptr< std::string >( new std::string( "G" ) ) ); index.push_back( std::shared_ptr< std::string >( new std::string( "A" ) ) ); index.push_back( std::shared_ptr< std::string >( new std::string( "F" ) ) ); index.sort( compare ); for( std::list< std::shared_ptr< std::string > >::iterator i = index.begin( ); i != index.end(); ++i ) std::cout << *(*i) << "\n"; }
-
cooky451 schrieb:
Wenn du den Fehler mal gelesen hättest anstatt vor Schreck vom Stuhl zu kippen, hättest du bemerkt, dass er einfach nur bemängelt die Definition zwei mal gefunden zu haben. Wahrscheinlich hast du die Definition in einem Header. Du kannst die Definition entweder in eine .cpp auslagern, oder sie inline machen.
void foo(); // Header void foo() {} // .cpp // oder inline void foo() {} // Headerinline-tag hat mein problem gelöst. Danke für die schnelle Hilfe.
Swordfish schrieb:
Warum findest Du das bemerkenswert?
Wusste nicht genau, wo ich das hinschreiben muss und ob es da richtig ist
