Splitten von Header und Source File
-
Nein eben genau so ist es falsch!
Du hast 3 Dateien, zwei Sourcedateien (.c/.cpp/.cxx) und eine Headerdatei (.h/.hpp/.hxx). Überall wo die Deklarationen(!) benötigt werden bindest du die Headerdatei mittels #include ein. Kompiliert wird jede Sourcedatei einzeln. Dem Linker musst du anschließend aber alle Sourcedateien angeben, damit er daraus eine Executable erstellt.
Bei IDEs wie Dev-Cpp macht man das indem man ein Projekt erstellt und die Header und Sourcedateien dort hinzufügt.
-
Du inkludierst NIE die Source (ausser bei Templates).
Du linkst höchstens die anderen Source Dateien dazu. Das musst du aber über die IDE machen oder irgendwo als Parameter angeben.
Das aufteilen ist aus dem Grund, dass ein benutzer einer Funktion oder Klasse lediglich die genaue Deklaration kennen muss, um sie zu benutzen.
-
Hi toxor,
bei dieser Art geht leider der Sinn von Header-Dateien verloren.
Sie sollen dir helfen Definition und Implementierung zu trennen.
Leider kenne ich gvim nicht, aber wenn die Datei in deinem Projekt liegt,
sollte sie eigentlich mitgelinkt werden, so dass du die Source-Datei nicht
inkludieren muss. Wenn es sich um eine (oder mehrere) externe Datei(en) handelt,
dann erstellt man in einem separaten Projekt eine Library, die man
dann mitlinkt.
Das Hauptprobem beim Includieren von Source-Dateien liegt darin, dass der
Linker sich (wegen doppelten Sourcen) beschweren wird, wenn du zwei Dateien
zusammen linkst, die die gleiche Source-Datei includieren.Gruß,
CSpille
-
Hey danke für die vielen Antworten, aber wie ich das Problem nun lösen soll weiss ich leider immernoch nicht. Ich benutzte ja nicht die IDE des Dev-CPP sondern nur den Compiler. Zum Coden benutze ich den gvim (lediglich ein Texteditor mit Syntaxh.).
Soweit ich das jetzt verstanden habe soll ich das Sourcefile nicht includieren. Ok, dann erkennt er es aber auch nicht. Also soweit ich euch nun verstanden habe muß ich das Sourcefile auf einem anderen Weg einbinden. Ich hab jetzt einfach mal die beiden Files, "CloseNot.h" und "CloseNot.c" in das selbe Verzeichnis kopiert, wo die "hallo.cpp" lagert. Allerdings ohne die "CloseNot.c" zu inkludieren bekomme ich Fehler...das ist doch sch...
-
Also wenn ich direkt über die IDE vom Dev mache, klappts so wie ihr gesagt habt. Jetzt stellt sich halt mir trotzdem die Frage, wie man das mit normalen Editoren löst.
-
Was bedeutet denn, du benutzt nur den Compiler von Dev-Cpp? Wie rufst du den denn auf? Über die Kommandozeile (bzw. direkt von vim aus), oder startest du erst Dev-Cpp und öffnest die Source, die du dann kompilierst?
Wenn du sowieso gvim als Editor benutzt, könntest du dir auch den MingW runterladen und den als Compiler benutzen. Der wird relativ häufig verwendet, das heißt, man könnte dir besser helfen. Dev-Cpp benutzt intern nämlich auch MingW (allerdings wahrscheinlich eine etwas ältere Version)...
Felix
P.S.: Mit g++ würdest du erst beide Sourcen einzeln kompilieren, also etwa
g++ -c hallo.cpp -o hallo.o g++ -c CloseNot.c -o CloseNot.o
und dann alles zu einem Programm linken, mit
g++ hallo.o CloseNot.o -o hallo.exe
P.S.: Wieso nennst du CloseNot.c so und nicht CloseNot.cpp, wenn es doch eine C++ Quellcode-Datei ist?
-
Es gibt ein C/C++ Plugin für den vim, so kann ich, nachdem ich den compiler vom Dev über die Windows Umgebungsvariablen eingebunden habe, aus vim heraus kompilieren.
MinGW braucht mir zuviel Platz,deswegen nutz ich den Dev.Zu dem CloseNot.c : Ich hab so in einem C++ Tutorial gelesen, keine Ahnung was das sollte. Hab mich auch schon gewundert, warum das Source File .c heisst. Ok dann änder ich das mal.
-
Phoemuex schrieb:
P.S.: Mit g++ würdest du erst beide Sourcen einzeln kompilieren, also etwa
g++ -c hallo.cpp -o hallo.o g++ -c CloseNot.c -o CloseNot.o
und dann alles zu einem Programm linken, mit
g++ hallo.o CloseNot.o -o hallo.exe
P.S.: Wieso nennst du CloseNot.c so und nicht CloseNot.cpp, wenn es doch eine C++ Quellcode-Datei ist?
Oder einfach
g++ hallo.cpp CloseNot.cpp -o hallo.exe
-
Ja wie gesagt, ich kann mit dem C++ plugin über einen einfachen Button kompilieren, ohne g++ über eine Konsole zu starten, daher weiss ich nicht wie da mehrere headers hinzufügen kann ...
-
toxor schrieb:
Ja wie gesagt, ich kann mit dem C++ plugin über einen einfachen Button kompilieren, ohne g++ über eine Konsole zu starten, daher weiss ich nicht wie da mehrere headers hinzufügen kann ...
Hmm.. Dann solltest du dich bei deinem Plugin schlau machen, wie man das macht. Und sonst hald wirklich eine anständige IDE benutzen. Was hast du den für einen Computer, wenn der zu viel Plazt braucht?!
-
einen kleinen winzigen eee pc ( auf dem xp läuft ), und da habe ich gerade mal 1 gig noch frei, der Mingw braucht knapp 500, also ist mir das deutlich zu viel. Eine anständige IDE braucht zuviel Platz auf dem kleinen 7" Bildschirm, deswegen der vim. Ja ok aber hast schon recht, vermutlich muss ich das plugin mal besser erforschen, danke aufjedenfall an alle die mir hier wertvolle Tips gegeben haben
-
MingW braucht bei mir genau 106,8 MB und ich habe da noch jede Menge Unix-Tools wie ls, rm und so weiter drin, also woher du die Behauptung mit den 500 MB nimmst, weiß ich nicht...
Ansonsten: Dev-Cpp benutzt doch auch den MingW, wahrscheinlich aber reduziert auf die nötigsten Dateien.
Und wie du das mit dem Plugin jetzt schaffst, das vernünftig zu kompilieren, musst du in der Dokumentation oder so nachlesen...
Felix
-
Ach nee sry da hab ich was verwechselt, ich hatte grad cygwin im Kopf (und das braucht sogar fast 1 Gig). Naja ok MinGW wäre dann tatsächlich eine alternative...
-
MinGW braucht bei mir 92MB und dazu kommt dann noch Code::Blocks als IDE mit 31MB und die Boost-Bibliotheken mit 150MB, aber die brauchst du ja net. Wenn du soviel Platz nicht hast, dann ist ein eeePC vielleicht der falsche Computer um Software zu entwickeln.
-
eeePC vielleicht der falsche Computer um Software zu entwickeln.
Das ist er immer..
Naja.. ich würde dir auch empfehlen einen neuen PC zu kaufen es gibt da ja auch ganz mobile Notebooks, die um einiges mehr leisten, als das Ding..
-
Der eee ist super , ich will gar keinen anderen
. Und das mit dem vim krieg ich schon noch hin
-
Warum besitzt du denn keinen vernünftigen Rechner?
http://www.apple.com/macbookpro/
Wie soll man einen Rechner ohne Betriebssystem betreiben?
btw. kauf dir kein MacBook Air, sowas braucht die Welt auch nicht.