C++ - #include

xXenermaXx

Freizeitschrauber(in)
Hey liebe PCGH-Community,

ich habe derzeit ein Projekt - bestehend aus Header- (mit Funktionendeklaration) und .cpp-Datei (mit Funktionendefinition) - erstellt.
Auf den Header wollte ich dann mal mit einer anderen .cpp zugreifen (die nicht im Projekt implementiert ist).
Dies funktionierte jedoch (schon fast erwartungsgemäß) nicht -> undefined reference to 'einerFunktion()'.
Nun frag ich euch wie ich das hinbekommen kann.
"included" ist das Ganze via kompletter Pfandangabe (da sich das Projekt an einem anderen Ort befindet).
Es soll am Ende so funktionieren, wie bei einer Header-Datei aus der "C Standard Bibliothek".
Natürlich habe ich schon danach gesucht, weiß jedoch nicht so ganz welche Suchschlüssel dafür am angebrachtesten sind.
Ich hoffe ihr versteht was ich möchte.
IDE ist CodeBlocks

MfG xXenermaXx
 
Normalerweise setzt man irgendwo include-Verzeichnisse, die zu berücksichtigen sind. Wie genau das in deiner IDE funktioniert, weiß ich allerdings nicht, da ich die noch nie verwendet habe. Bei gcc ist das jedenfalls das Flag -I<Pfad>, also z. B. -Iprojekt1/include, wenn du MinGW als COmpiler nutzt, müsste das auch das Flag sein.

undefined reference to 'einerFunktion()' klingt aber eher nach Linkerfehler. Wahrscheinlich hast du deine Objectfiles auch in einem anderen Ordner und das kriegt der Compiler nicht gebacken.
 
Ich danke dir für die rasche Antwort.
Die IDE (welche Komponente jetzt genau weiß ich nicht) legt in dem Ordner der nach dem Projekt benannt ist die Ordner Struktur obj/Debug an, in dem die Objektdatei projektname.o liegt. - ich hab leider bisher nur mit Projekten gearbeitet, in denen die Dateien alle in einem Ordner liegen.
Der Compiler ist im übrigen der GNU GCC.

MfG xXenermaXx
 
Sind beide .cpp Dateien in dem CodeBlocks Projekt drin? Und wenn du auf kompilieren drückst, kannst du sehen, dass beide unabhängig voneinander kompiliert werden?
Wie bingo88 schon sagte, ist das ein Linker-Fehler. Das inkludieren klappt, nur später beim linken gibt es Fehler. Da du mit CodeBlocks arbeitest, kann ich nicht direkt großartig weiterhelfen. Eventuell ist deine eine .cpp Datei garnicht im Projekt und wird so auch nicht kompiliert und mitgelinkt.

Das normale Kompilierverfahren sieht so aus:
Code:
g++ -o functions.o -c functions.cpp     (Compiliere functions.cpp zu functions.o)
g++ -o main.o -c main.cpp               (Compiliere main.cpp zu main.o)
g++ -o out main.p functions.o           (Linke main.p und functions.o zu out)

Wenn du eine Objektdatei beim linken vergisst, fehlen die Definitionen aus der Datei.
 
Hey(:

Nein die beiden .cpps sind nicht in einem Projekt - sollen sie auch nicht.
Ich möchte es so nutzen, als wären sie in der C Standard Bibliothek, nur an anderer Stelle gespeichert.
Also praktisch wiederverwendbar (ohne, dass ich Header und zugehörige .cpp in das neue Projekt [mit neuer .cpp], hinein kopieren muss)
Also bspw. wie wenn man die math.h nutzt.

MfG xXenermaXx
 
Die C Standardbibliothek ist aber auch nicht ein Ordner von *.c Dateien die der Compiler dann einfach dazu linked wenn du die entsprechende *.h includest. Wenn du eigene oder fremde Funktionen aus *.cpp Dateien in einem anderen Projekt verwenden möchest dann gibt es genau zwei Möglichkeiten:

1) Die einfachste und offensichtliche Möglichkeit: Du kopierst die Dateien einfach in dein Projekt.

2) Die manchmal bessere Möglichkeit wenn es sich um viele Dateien handelt: Du erstellst eine Library/Bibliothek aus deinen Dateien. Dies ist auch das was die C Standardbibliothek macht. Dabei wird dein Code zu einer statischen oder dynamischen Libary compiliert, die du dann in anderen Projekten benutzen kannst, indem du die Header includest und die Libary dazu linkst. Leider ist das nicht ganz einfach und wie man das mit CodeBlochs macht kann ich dir auch nicht sagen aber das findest du eventuell über Google heraus.
 
Zurück