Ansi-C Programm nach C++ übertragen
-
Die Frage ist, warum willst du ein C-Programm 1:1 von einem C++ Compiler übersetzen lassen. Du kannst einfach die C-Dateien deinem Projekt hinzufügen (mit .c-Endung) und diese dann als normale Funktionen von einem C++ Programm aufrufen lassen.
Insbesondere für Listenverwaltung solltest du in C++ die vordefinierten Klassen der Standard C++ Library (z.B. std::list) verwenden.
-
das is ne aufgabe...bin student...das programm das wir unter c mit funktionen entwickelt haben sollen wir etz mit ner klasse und methoden als c++-programm zum laufen bekommen...
aber ich probier scho ewig rum und bekomm den fehler net weg...der prof. is auch net sonderlich hilfreich ^^
-
du kannst das meiste doch schon fixen in dem du statt void* einfach struct address* schreibst. dann kommt nur noch das problem mit dem compare
-
dann noch bei static struct address *start; das static wegnehmen und die compare funktion weiter nach oben schieben und es läuft
-
Gut...die Fehler sind weg... aber etz kommt beim starten der anwendung einer ^^:
[Window Title]
Microsoft Windows[Main Instruction]
list.exe funktioniert nicht mehr[Content]
Windows kann online nach einer Lösung für das Problem suchen.[V] Problemdetails anzeigen [Online nach einer Lösung suchen und das Programm schließen] [Programm schließen] [Programm debuggen]
--------------------
Jetz weiss ich gleich garnimmer was ich machen soll ^^...
ich glaub irgendwas läuft komplett verkehrt...
Oder läuft es bei dir richtig ?
-
Jau stürzt auch bei mir ab. Aber das Menü kommt noch.
-
Jetz weiss ich gleich garnimmer was ich machen soll ^^...
Debugger benutzen
-
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
Statthelp = ptr;dann einfach casten
help = (address*) ptr;2. die Funktion compare war unbekannt
den Fehler hatter ihr ja schon, einfach die Funktion nach oben setzen3. 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_HHab 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