Ansi-C Programm nach C++ übertragen



  • Hab das etz mit nem Konstruktor so versucht:

    List::List()
    {
    	start = 0;
    }
    

    Bekomme aber immer folgende Fehler:

    Fehler 1 error LNK2005: "public: __thiscall List::List(void)" (??0List@@QAE@XZ) ist bereits in list.obj definiert. main.obj

    Fehler 2 fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden. D:\Studium, Freizeit, etc\Studium\Informatik\Praktikum\list\Debug\list.exe

    Ich bin bissel hilflos bei der ganzen Sache...hoffe auf Hilfe.
    Danke im Voraus!



  • Kann mir wirklich keiner helfen ?
    (Habe meinen letzten Beitrag editiert...)



  • Apokalypsus schrieb:

    Kann mir wirklich keiner helfen ?
    (Habe meinen letzten Beitrag editiert...)

    Zum einen kann ich mir deinen Code nicht anschauen (der Link funktioniert nicht mehr) zum anderen tippe ich bei den genannten Fehler auf fehlende Includeguards oder fehlender Trennung Header/Source.

    cu André



  • also bei mir und nem kumpel geht der link wunderbar...das liegt wohl an deiner verbindung o.ä.... würde dir die file aber auch gern mailen, wenn du magst 🙂



  • Hallo!

    Hab jetzt nicht versucht dein Programm zu verstehen, aber wenn ich die Fehlermeldungen des Compilers abarbeite funktioniert es bei mir.

    Folgende Fehler kamen:

    1. void-Zeiger Zuweisungen
    Statt

    help = ptr;
    

    dann einfach casten

    help = (address*) ptr;
    

    2. die Funktion compare war unbekannt
    den Fehler hatter ihr ja schon, einfach die Funktion nach oben setzen

    3. die Klassenvariable start war nicht initialisiert

    Die Variante mit dem Konstruktor funktioniert natürlich nicht, du müsstest einfach irgendwo (z.B. in der list.cpp hinter der Definition von "address") die Zeile

    address* List::start = NULL;
    

    einfügen.

    Bei mir lief es dann. (Nur 3 Adressen getesten, aber es sah soweit gut aus)

    Gruß



  • danke für die antwort und mühe...werd's gleich nochmal ausprobiern



  • Ops, nocht etwas vergessen 🙂

    Die Zeilen standen schon da, mussten nur "umkommentiert" werden. So sieht es jetzt aus:

    //	struct address *el1 = *((void**)ptr1), *el2 = *((void**)ptr2);
    	struct address *el1 = *((struct address**)ptr1), *el2 = *((struct address**)ptr2);
    


  • also hab es etz überall gecastet und wie du gesagt hast start initialisiert:

    ...
    struct address
    {
    	void *next;
    	char name[20], vorname[20], str[20], hausnr[4], plz[6], ort[20];
    };
    
    address* List::start = NULL;
    
    void List::newadd(struct address *input)
    ...
    

    allerdings kommt dann folgender fehler:

    Fehler 1 error C2761: 'address *List::start': Die erneute Deklaration der Memberfunktion ist unzulässig list.cpp 25

    hoffe du kannst was damit anfangen...ich jedenfalls net ^^
    oh man...ich muss echt nerven...grich nix selber gebacken... 😕
    sry...



  • Wie sieht die list.h aktuell aus?



  • So:

    #ifndef LIST_H
    #define LIST_H
    
    int compare(const void *ptr1, const void *ptr2);
    
    //__________Klassendefinition: List__________
    class List
    { 
        //private:
        protected:
    	struct address *start;
    
        public:
    	void newadd(struct address *input);
    	int printlist(char len);
    	void add_ins(int n, struct address *input);
    	void add_del(int n);
    	int readfile(char *file);
    	int writefile(char *file);
    	int abcsort(void);
    	//int compare(const void *ptr1, const void *ptr2);
    	int menu();
    };
    
    #endif // LIST_H
    

    Hab statt die Funktion compare an den Anfang zu setzten sie hier mit reingeschrieben. Hoffe das geht genauso...
    ______________________________________________
    EDIT: Hab grad gemerkt, dass ich von vorhin noch das static weg hatte...
    Jetzt geht es !! 🙂
    Thx !!
    Freu mich.
    Aber könntest du mich evtl. aufklären was es mit dieser Initialisierungsmethode auf sich hat - spricht macht man das immer so um Klassenglobale (richtiger Begriff?) Variablen zu intialisieren?



  • Apokalypsus schrieb:

    Aber könntest du mich evtl. aufklären was es mit dieser Initialisierungsmethode auf sich hat - spricht macht man das immer so um Klassenglobale (richtiger Begriff?) Variablen zu intialisieren?

    Es gibt einige Begriffe dafür, z.B. Klassenvariable, statische Variable, statische Klassen-Member, usw. ..., aber Klassenglobale hört sich auch gut an, obwohl ich das jetzt noch nie gehört habe. 🙂

    Professoren neigen dazu Begriffe nach eigenen Maßstäben zu "verbessern", daher musst du eben verwenden, was dein Prof dir vorschreibt. 😃

    Hab zur Erklärung mal den ersten Google-Link eingefügt.

    http://www.cpp-tutor.de/cpp/le10/le10_04.htm

    Gruß



  • Der Begriff war jetzt eigentlich eher so das erstbeste was mir selber dafür eingefallen is ^^...nix was unser Prof benutzt hätte oder so...
    Und danke für den Link...jetzt versteh ich das halbwegs 🙂

    Werd' euch wohl erstmal nicht mehr nerven müssen...war die letzte Übung für dieses Semester 🙂

    Na dann...schöne Weihnachten und nen gutes neues Jahr !

    MfG
    Apokalypsus


Anmelden zum Antworten