Problem beim einbinden eines Headers
-
Damit ich das Einbinden eines Headers über habe ich ein wirklich sehr einfaches Programm geschreiben.
maindatei
#include <iostream> #include "a_func.h" using namespace std; int main (void){ a_func(); cin.get(); }header a_func.h
void a_func (void);Quellcode des Headers a_func.cpp
#include <iostream> #include "a_func.h" using namespace std; void a_func(void){ cout << 5 * 5 << endl; }Allerdings zeigt er mir die Fehlerwahrnung undefined reference to `a_func()' an. Was soll ich machen?
-
Der Code ist schonmal richtig. Hast du die a_func.cpp deinem Projekt hinzugefügt oder beim Compilieren mit angegeben? Du hast momentan nämlich nur deine maindatei compiliert.
-
Hast du dem Compiler beide cpp-Dateien angegeben? Wenn nicht, kann dieser natürlich die Definition der Funktion nicht finden.
-
sebi707 schrieb:
Du hast momentan nämlich nur deine maindatei compiliert.
Gelinkt natürlich.
-
sebi707 schrieb:
Der Code ist schonmal richtig. Hast du die a_func.cpp deinem Projekt hinzugefügt oder beim Compilieren mit angegeben? Du hast momentan nämlich nur deine maindatei compiliert.
nein. Wie Compiliere ich den die Header zusammen mit der main?
-
win8789 schrieb:
nein. Wie Compiliere ich den die Header zusammen mit der main?
Kommt drauf an, welche Werkzeuge du beim Programmieren benutzt.
-
SeppJ schrieb:
win8789 schrieb:
nein. Wie Compiliere ich den die Header zusammen mit der main?
Kommt drauf an, welche Werkzeuge du beim Programmieren benutzt.
Es tut mir leid ich programmiere erst seit kürzeren. Als orienterung benutze ich das Buch c++ einführung und professionelle programmierung von ulrich breymann. Im 4.3.2 steht, dass es besser ist wenn man die Schnittstelle(, den Funktionsprotypen; Klassen) und Implementationen zu trennen. Allerdings wurde momentan noch nichts zu den Werkzeugen gesagt. Das kommt erst noch später leider. Also ich weiß es leider nicht.
-
Wie heisst das Programm mit dem du arbeitest, und welches dir irgendwo "undefined reference to `a_func()'" ausgibt?
-
Finnegan schrieb:
Wie heisst das Programm mit dem du arbeitest, und welches dir irgendwo "undefined reference to `a_func()'" ausgibt?
Dev-C++
-
win8789 schrieb:
Dev-C++
Okay, dann schau mal ob deine
a_func.cppauch zu dem Projekt hinzugefügt wurde. Solche IDEs haben üblicherweise irgendwo eine Liste mit den Dateien, die zum Projekt gehören. Dort müsste auch deinemain.cppoder wie sie auch immer heisst stehen. Wenna_func.cppdort nicht ebenfalls aufgelistet ist, dann versuche die mal hinzuzufügen und probier's nochmal.Finnegan
-
Finnegan schrieb:
win8789 schrieb:
Dev-C++
Okay, dann schau mal ob deine
a_func.cppauch zu dem Projekt hinzugefügt wurde. Solche IDEs haben üblicherweise irgendwo eine Liste mit den Dateien, die zum Projekt gehören. Dort müsste auch deinemain.cppoder wie sie auch immer heisst stehen. Wenna_func.cppdort nicht ebenfalls aufgelistet ist, dann versuche die mal hinzuzufügen und probier's nochmal.Finnegan
ok Danke habe es jetzt hinbekommen. Du musst wissen, dass es das erste mal war, dass ich ein Projekt erstellt habe. Hatte zuvor immer nur einzelen Quelldateien erstellt. Danke nochmal
-
Egal, ob Du DevC, Code::Blocks oder MS Visual Studio 2015 Community (das wäre mein Tipp für C++ 11 auf MS Windows) verwendest, Du legst ein Projekt an und erhälst dabei eine c/cpp-Datei, in der Du die Funktion main(...) findest. Dort bindest Du die notwendigen Header von C/C++ ein. Der nächste Schritt ist dann das Hinzufügen weiterer Funktionen, die in einer xyz.h und xyz.cpp deklariert und definiert sind. Diese beiden Dateien xyz.h und xyz.cpp fügst Du beim Projekt bei vorhandene Elemente/Dateien ein. Dann sollte das Klappen mit dem Kompilieren und Linken.
Schau Dir mal folgende Themen an: Kompilieren, Linken, Präprozessor, Header-/Implementierungsdateien.
In der Header-datei findet man normalerweise die Prototypen der Funktionen. Durch das #include xyz.h sind diese dann überall in der Implemetierungsdatei deklariert (=bekannt gemacht), so dass die Reihenfolge in der cpp-Datei (Implementierung, Definition der Funktionen) keine Rolle mehr spielt.
Der Vorteil der Trennung in h/cpp liegt darin begründet, dass Du den Header xyz.h auch in weiteren cpp-Dateien verwenden kannst. Somit sind diese Funktionen in xyz.cpp dort direkt verwendbar. Du benötigst für Header unbedingt sogenannte Header Safeguards, damit der Header nicht mehrfach inkludiert wird.