Einbinden von Quelltextdateien (oder: Wie lagere ich sinnvoll Quellcode aus?)
-
Ich bin über die Schule zu BCB gekommen, dass was wir dort lernen ist aber eher nur mäßig.
Ich habe auch eigentlich keinen großen Probleme mir das nötigste selbst rauszusuchen, nur leider findet man selbst in den guten Tutorials nicht immer alle Infos, die man gerne hätte (den Anspruch sollte man ja auch gar nicht stellen).Zu meinen eigentlichen Fragen:
Ich habe ein Projekt bestehend aus mehreren Formen, die auch untereinander auf sich zugreifen. Auch einige wenige globale (?) Variablen sind dabei. Ich bin mir noch nicht mal sicher ob man Variablen im "public"-Teil einer Form-Deklaration als global gelten. Außerdem habe ich (momentan noch in der jeweiligen Form.cpp) einige Funktionen, die auch auf Objekte und die (globalen) Variablen der Form zugreifen können sollen.
Nun wirkt das alles schon ein bisschen unstrukturiert und ich wollte Fragen, in wie weit man solche Funktionen und Variablen in cpp's und Header auslagern kann. Und es wäre interessant, wie ich diese dann einbinde (mit include, ist schon klar, aber binde ich aus Form1.cpp zuerst meine funktionen.cpp ein oder dann doch die funktionen.h und in wie weit ist funktionen.cpp in funktionen.h eingebunden; solche Sachen halt.)Also eine "Einführung" in diesem Bereich wäre nicht schlecht, ich habe auch in der FAQ gelesen, aber da steht "nur" wie man mit 2 Formen arbeitet.
Ich habe auch auf anderen Webseiten nichts wirklich hilfreiches zu dem Thema gefunden und ich möchte gern wissen, wie "richtige" Programmierer das machen.
Nebenbei bemerkt ist mir natürlich klar, dass man eigentlich sowieso nicht mit "losen" Funktionen arbeiten sollte, sondern man doch lieber Klassen verwenden soll, aber ich würde trotzdem gern eure Meinung dazu hören.Danke schonmal, dass Ihr euch die Zeit genommen habt diesen längeren Beitrag zu lesen und über eine Rückmeldung würde ich mich sehr freuen (würde mir wirklich Helfen).
MfG
Knowman
-
Hi
Das ist garnicht mal ein BCB spezifisches Problem bzw. Frage. Bin mir also nicht sicher ob das hier rein gehört.
In die Headerdateien (*.h) gehören Klassen-,Struktur- und Funktiondeklarationen sowie evtl. vorhandene Konstanten oder defines.
Die Definition der Klassmethoden oder Funktionen geschieht in den Dateien die auf .c,.cpp oder wie auch immer enden. Eine kleine Ausnahme bilden da Templates da ist es unter Umständen nötig (compilerabhängig) die Deklaration und Definition im Header zu erledigen. Gleiches gilt i.d.R. für inline Klassen.
Die Headerdateien werden in die Implemtierungsdatein mittels der #include-Direktive geladen. Man includiert i.d.R. keine Quellcodedateien, sprich .c,.cpp.Diese Arbeitsweise erlaubt dir einen modularen Aufbau deines Projekts. Deine Objekte kapselst du in eigene Dateien (*.h & *.cpp).
Das bedeutet auch dass du "lose" Funktionen bzw. deren Prototypen im entsprechenden Header (evtl. in Sinnbereiche unterteilt) deklarierst und die Implementierung separat vornimmst.
-
Also findet der Compiler immer automatisch die passende *.cpp zu jeder *.h?
Ich bekomme jetzt immer Fehler wie "[Linker Fehler] Unresolved erxternal 'Funktion(Parameter)' referenced from C:\...\UNIT1.OBJ". er scheint hier also die Funktionsdefinitionen nicht zu finden, obwohl ich die Header mit Definition der Funktion eingebunden habe (in Form1.cpp").
Woran kann das liegen?
P.S.:
Die Fehlermeldung habe ich mit viel Arbeit gelöst, in dem ich einiges an meiner include-Reihenfolge geändert habe und alle zusätzlichen Objektdateien mit#pragma link "funktionen.obj"
einbinde. (Irgendwie ist der Linker vom BCB wohl leicht bescheuert, dass er die fehlenden Objektdateinen nicht selbst einbindet.)