Zum Inhalt springen

Redefinition Problem


Mesrine

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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. ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...