Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

Danke euch vielmals. Werde zu den angesprochenen stichworten noch etwas lesen.

Mesrine

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

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

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.