[C++]Problem beim Einbinden selbst erstellter Header-Dateien

Status
Nicht offen für weitere Antworten.

DeChecka

Erfahrenes Mitglied
Hi!

Ich habe in Dev-C++ ein Projekt (Projekt 1) erstellt. Dort habe ich Header-Dateien mit zugehörigen Cpp.Dateien erstellt.
Wenn ich jetzt aus einem anderen Projekt (Projekt 2) diverse Header-Dateien aus Projekt 1 einbinden will, wie kann ich das denn machen?
Dürfte doch eigentlich keine Probleme geben, da alle Dateien im selben Verzeichnis liegen...

MfG
DeChecka
 
Wenn alle Dateien in gleichen Verzeichnis liegen, sollte er eigentlich alle finden. Einfach mit '#include "header.h"' einbinden. Wenn die Headerdateien in einem anderen Verzeichnis liegen, mußt Du dieses dem Compiler bekanntmachen (üblicherweise mit -IPfadMitHeaderdateien, z.B. -IC:\Projekte\Projekt1\src)
 
moin


Sicher das alle Dateien im selben Verzeichnis liegen, das ist normalerweise nicht der Fall, wenn du Projekte automatisch erstellen lässt.

Vielleicht geht es auch wenn du
#include "..\Projekt1\header.h"
schreibst.

Oder du gibtst den absoluten Pfad an:
#include "C:\programmierung\projekt1\header.h"


mfg
umbrasaxum
 
Hmm, hab ich alles mehr oder weniger so schon versucht...

Vielleicht liegt's auch an was anderem, mit was ich mich gar nicht auskenne...

Also Fehlermeldung kommt jedenfalls folgende:
[Linker error] undefined reference to `Dateipruefen(std::string)'
ld returned 1 exit status
C:\Programme\Dev-Cpp\Makefile.win [Build Error] [TopNoten.exe] Error 1

"Dateipruefen" ist eine Funktion, die in meiner Header enthalten ist...

Was genau bedeutet diese Fehlermeldung?

MfG
DeChecka
 
moin


Solch eine Fehlermeldung kommt, wenn du eine Funktion aufrufst, die es nicht gibt.
Kannst du denn andere Funktionen aus der Heder aufrufen?


mfg
umbrasaxum
 
DeChecka hat gesagt.:
Hmm, hab ich alles mehr oder weniger so schon versucht...

Vielleicht liegt's auch an was anderem, mit was ich mich gar nicht auskenne...

Also Fehlermeldung kommt jedenfalls folgende:
[Linker error] undefined reference to `Dateipruefen(std::string)'
ld returned 1 exit status
C:\Programme\Dev-Cpp\Makefile.win [Build Error] [TopNoten.exe] Error 1

"Dateipruefen" ist eine Funktion, die in meiner Header enthalten ist...

Was genau bedeutet diese Fehlermeldung?

MfG
DeChecka


Vielleicht in deiner Header aber sicherlich nicht in dem gleichen cpp File?

Du musst erst das cpp file in dem Dateipruefen implementiert ist
zu einem Object file kompilieren und das dann zu deiner anderen Datei
dazulinken...

Gruß

RedWing
 
Aaaah ja, jetzt geht's!
Danke RedWing, danke an alle!

Eine Frage hab ich dann aber noch...
Das ist ja schon etwas umständlich, wenn man die cpp-Dateien dann immer noch hinzufügen muss...
Gibts da keinen anderen Weg? Die Standard-Header braucht man ja auch nur einzubinden mit "#include"...

MfG
DeChecka
 
Code:
Die Standard-Header braucht man ja auch nur einzubinden mit "#include"...

Mhm also die Implementation der Funktionen der Standardheader die du
verwendest befinden sich meistens in der Standardlib und die wird automatisch dazugelinkt...

Ansonsten solltest du einfach die Funktionen die du verwenden möchtest (die sich in
externen cpp files befinden) in Obect module kompilieren und diese dann
dazulinken. (Find ich jetzt nich umstädnlich). Wie das bei dev cpp funktioniert weiß
ich leider nicht beim gcc würde es so ausschauen:
Code:
gcc -c deinemodul.cpp -o  deinemodul.o
dann deine Anwendung in der du die Funktionen verwendest so übersetzen:
Code:
gcc deinemodule.o deineanwendung.cpp -o deineanwendung
Gruß

RedWing
 
Hi.

Die Standard-Header Dateien gehören ja auch zur Standard-Bibliothek, die automatisch immer hinzugelinkt wird.

Wenn du aus deiner C++ Datei eine Bibliothek erstellt hättest und diese in einen Standard-Pfad kopiert hättest, dann hätte es auch so ausgereicht die Header Datei einfach nur zu #include'n.

Du hättest also deine C++ Datei nicht zu deinem Projekt hinzufügen müssen (das wäre ja gerade mehreren bei größeren Projekten äußerst unpraktikabel), du hättest nur irgendwo einstellen müssen welche zusätzliche Bibliothek bzw. Objektdatei der Linker noch hinzufügen soll.

Grundsätzlich werden nämlich bis ein ausführbares Programm aus deinem C/C++ Code erstellt ist mehrere Phasen durchlaufen:

1) C-Präprozessor; der verarbeitet deine C/C++ Dateien insbesondere die Präprozessordirektiven (Zeilen die mit # anfangen, wie z.B. #include usw.)

2) C/C++ Compiler; der wiederum verarbeitet die Ausgabe aus Schritt 1) und erstellt erstmal eine Objektdatei. Diese Datei enthält Objekt-Code wo meist noch nicht alle Referenzen/Adressen aufgelöst sind. (Der GCC erstellt sogar zwischendurch erstmal eine Assemblerdatei, die dann vom Assembler in eine Objektdatei übersetzt wird)

3) Der Linker fügt alle Objektdateien zu einer ausführbaren Datei zusammen und löst externe Referenzen auf.
 
Hmm, also wie mache ich das jetzt mit Dev-C++ genau, das mit der Objektdatei?

Übrigens, was hat es mit diesen Objektdateien genau auf sich?
Sind das die mit der Endung ".o", da liege ich richtig oder?
Hab mich nämlich schon gefragt, wieso da außer der ".h" und der ".cpp" noch ein ist! :)

MfG
DeChecka
 
Status
Nicht offen für weitere Antworten.

Neue Beiträge

Zurück