Programm mit mehreren *.cpp Dateien und das "saubere" programmieren
-
Da ich ja immer bemüht bin anständig zu programmieren, will ich meinen code auch übersichtlich halten. da aber eine datei inzwischen überquillt habe ich zuerst viele funktionen in .h dateien ausgelagert, bis mir aufgefallen ist, dass header dateien ja dazu da sind, deklarationen und makros aufzunehmen.
jetzt findet sich in "header.h" all das zeug, was ich in anderen cpp dateien brauchen könnte. zB globale variablen etc.
wenn ich aber zwei weitere cpp dateien erstelle und dort meine funktionen ablege meckert er rum, weil "main_func.obj : error LNK2005: "int ( seats)[12]" (?seats@@3PAY0M@HA) bereits in main.obj definiert*" ist.
liegt wohl daran, dass ich in jeder cpp datei am beginn die header.h include. mache ich das nicht, funktioniert auch nix.
wie programmiert man denn nun sauber und richtig?
was kommt in welche dateien und wie füge ich alles beim compilieren ordenlich zusammen?so long
eagle2k
-
Füge an den Begin der Header Datei einfach ein
#ifndef HEADER_H_ #define HEADER_H //Der Inhalt Deiner Headerdatei #endif
Und zu den Globalen Variablen... Das ist ganz böse! Globale Variablen sind eigentlich nie nötig und machen den Code gefährlich.
-
Das ifndef hilft da auch nicht, es darf die Variable einfach nur einmal geben. Im Header nur die Bekanntmachung mit extern.
header.h:
extern int x;
und in einer einzigen c-Datei:
int x;
-
Obwohl ich meine (kurzen) Programme auch auf mehrere cpp und h Dateien aufteile habe ich bisher kein extern benötigt... Wofür ist das?
-
Extern bedeutet, dass eine Variable in einer Übersetzungseinheit definiert wird.
-
Und was ist dann mit Übersetzungseinheit gemeint?
-
CarstenJ schrieb:
Extern bedeutet, dass eine Variable in einer Übersetzungseinheit definiert wird.
Muss es nicht "deklariert heißen?
int i; //definition + deklaration von i extern int i; //deklaration von i int hallo(); //deklaration von hallo int hallo() // definition von hallo { }
[edit]http://www.c-plusplus.net/forum/viewtopic.php?t=61231
So stehts in der FAQ[/edit]
-
Er meint, nachdem eine Variable als extern deklariert wurde, wird sie in einer Übersetzungseinheit definiert - so habe ich es verstanden und habe nix dagegen.