cpp oder h oder wie ist es ?
-
hallo,
Bin an dem Punk gekommen wo mein Quelltext zu gross wird und ich will
mein Code in cpp oder h dateien verteilen.
Dacher ist meine Frage:
Wo deklariere ich funktionen wo ich die Definiere.
Wo schreibe ich includes und using namespace std.
Gründsezlich geht es mir um funktionen, mit classen bin ich nicht so weit,
PS: habe so um die 20 funktionen und 30 var's.
-
w81 schrieb:
Dacher ist meine Frage:
Wo deklariere ich funktionen wo ich die Definiere.Das steht in jedem guten C++ Buch oder C++ Tutorial.
w81 schrieb:
Wo schreibe ich includes
Kommt draufan.
w81 schrieb:
und using namespace std.
Nirgends.
-
Wenn du schon
using namespace std;anwenden willst, setze das möglichst nur in die .cpp wo du das brauchst.
Bei selbst geschriebenen .h-Dateien an "Include Guards" denken.
Und zu deinen anderen Fragen gibt es hier im Forum verschiedene Auffassungen.
MfG f.-th.
-
w81 schrieb:
Wo deklariere ich funktionen wo ich die Definiere.
In eine Header-Datei kommen nur Deklarationen, Definitionen haben hier nichts verloren (natürlich abgesehen von Klassen, Aufzählungen und Templates).
w81 schrieb:
Wo schreibe ich includes.
Falls möglich, benutzt du in der Header-Datei Vorwärtsdeklarationen, und in der cpp-Datei
#include.
Eine Vorwärtsdeklaration ist dann möglich, wenn der entsprechende Datentyp nur bei Zeigern, Referenzen, Funktionsdeklarationen und/oderfriendvorkommt, ansonsten brauchst du ein#include.
Wichtig: Eine Vorwärtsdeklaration, die sich auftypedefbezieht, ist nicht möglich. D.h. in solch einem Fall brauchst du auch ein#include. Bsp.:class std::string; // Vorwärtsdeklaration funktioniert nicht... #include <string> // ...man muss es leider so machen.w81 schrieb:
Wo schreibe ich using namespace std.
Das kommt auf keinen Fall in eine Header-Datei, und eigentlich auch nicht in eine cpp-Datei, da es keinen Sinn macht, einen Namensraum zu definieren, nur um ihn dann wieder mit einer using-Direktive auszuleeren. Der viel wichtigere Grund ist aber, dass, wenn du es in einer Header-Datei schreibst, den Namensraum für alle Dateien irreversibel offenlegst, die diese Header-Datei inkludieren, wodurch du schnell Namenskonflikte bekommen kannst. Ok ist es, wenn du den Namensraum höchstens mal für einen bestimmten lokalen Scope öffnest, z.B. in der main-Funktion.
-