Mesrine Geschrieben 28. Dezember 2004 Geschrieben 28. Dezember 2004 Hi, Ich nutze Dev-C++ und versuche ein C++ Programm zu schreiben in dem ich mehrere Funktionen aufrufe. In zwei dieser Funktionen, ich nenne sie mal "prog a" und prog b" schreibe ich in den Header: #include "std_norm_dist.cpp" und nutze diese Funktion dann innerhalb von prog a und prog b zum Berechnen von normalverteilten zufallsvariablen. Das Problem ist nun wenn ich in meinem Hauptprogramm die Funktionen prog a und prog b aufrufe dann bekomme ich von Dev C++ die Fehlermeldung: C:\..\std_norm_dist.cpp In function `long double std_norm_dist(long double)': C:\..\std_norm_dist.cpp redefinition of `long double std_norm_dist(long double)' 3 C:\..\std_norm_dist.cpp `long double std_norm_dist(long double)' previously defined here was muss ich tun um dieses Problem zu lösen? Vielen Dank für eure Hilfe im Voraus. Grüße, Mesrine Zitieren
Klotzkopp Geschrieben 28. Dezember 2004 Geschrieben 28. Dezember 2004 Man bindet keine .cpp-Dateien über #include-Direktiven ein. Schreib dir eine .h-Datei, die die Deklaration der Funktion enthält, und binde die dort ein, wo du die Funktion brauchst. Zitieren
CAITS Geschrieben 28. Dezember 2004 Geschrieben 28. Dezember 2004 außerdem wird hier offenbar ein mehrfach-include versucht. mach also conditional defines in deine headerdatei, ala #IFNDEF #DEFINE #INCLUDE #ENDIF, damit der mehrfachinclude nimmer passieren kann Zitieren
Mesrine Geschrieben 31. Dezember 2004 Autor Geschrieben 31. Dezember 2004 Danke euch vielmals. Werde zu den angesprochenen stichworten noch etwas lesen. Mesrine Zitieren
Mesrine Geschrieben 6. Januar 2005 Autor Geschrieben 6. Januar 2005 Danke nochmals habe das prob gefunden. Warum kann ich denn aber nicht einfach meine .cpp Datei mit meinen Funktionen ins Hauptprogramm einbinden? Muss man das über eine .h Datei machen?? Viele Grüße, Mesrine Zitieren
Klotzkopp Geschrieben 7. Januar 2005 Geschrieben 7. Januar 2005 So baut man Programme nunmal nicht auf. Der übliche Weg sieht so aus, dass du mehrere Übersetzungeinheiten hast (Übersetzungeinheit = .cpp-Datei). Die werden getrennt kompiliert und dann vom Linker miteinander verknüpft. Wenn du eine .cpp-Datei über eine #include-Direktive einer anderen hinzufügst, verbindest du sie zu einer einzigen ÜE. Das hat zur Folge, dass du die eingefügte Datei nicht dem Projekt/makefile hinzufügen kannst (d.h. sie wird nicht selbst kompiliert), weil sich sonst der Linker beschwert. Das mag bei kleinen Programmen noch funktionieren, aber du musst dabei extrem darauf achten, dass die Reihenfolge der #include-Direktiven passt und keine doppelte #includes auftreten. Spätestens, wenn du die eingebundene .cpp-Datei in mehr als einer anderen .cpp-Datei brauchst, geht das schon nicht mehr. Wenn du damit anfängst, .cpp-Dateien irgendwo einzubinden, die selbst andere .cpp-Dateien einbinden, verlierst du in garantiert in sehr kurzer Zeit den Überblick, was noch kompiliert werden muss - falls du die Abhängigkeiten überhaupt noch auflösen kannst. Der normale Weg sieht so aus: Falls ÜE1 auf Variablen oder Funktionen in ÜE2 zugreifen muss, erstellt man eine .h-Datei für ÜE2, die nur die Deklarationen enthält. Die kann ÜE1 (und auch jede andere ÜE, die den Zugriff braucht) dann einbinden. Der Linker kümmert sich darum, dass das passt. Das hat auch den Vorteil, dass bei Änderungen nur die geänderte .cpp-Datei neu kompiliert werden muss. Bei dir muss viel mehr neu erstellt werden. Man muss das nicht so machen. Aber es ist erprobt und für größere Programme der einfachste Weg. Gewöhn es dir einfach an. Zitieren
Mesrine Geschrieben 8. Januar 2005 Autor Geschrieben 8. Januar 2005 OK ich seh es ein und werd dann einfach meine funktionen in eine .h datei reinschreiben. ist ja eigentlich kein besonderer aufwand. vielen dank für deine mühe diese einfachen dinge einem anfänger zu erklären. Grüße, Mesrine Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.