Lektion 48:ÜbersetzungseinheitenEin C++-Programm besteht normalerweise aus mehreren Übersetzungseinheiten. Eine Übersetzungseinheit besteht dabei aus einer cpp-Datei. Bisher hat jedes Ihrer Programme aus nur einer cpp-Datei bestanden. Das soll nun geändert werden. Als Beispiel nehme ich das Programm, das drei Zahlen sortiert.
Die sort-Funktion soll in einer eigenen Übersetzungseinheit stehen.
Sie sollten die folgenden Fehlermeldungen erhalten: e:\SOURCE\cppkurs\test\main.cpp(8) : error : 'sort' : undeclared identifier e:\source\cppkurs\test\sort.cpp(4) : error : 'swap' : undeclared identifier Falls Ihr Compiler die Fehlermeldungen deutsch ausgibt: e:\SOURCE\cppkurs\test\main.cpp(8) : error : 'sort' :nichtdeklarierter Bezeichner e:\source\cppkurs\test\sort.cpp(4) : error : 'swap' :nichtdeklarierter Bezeichner Die Fehler liegen daran, daß die drei Übersetzungseinheiten main.cpp, sort.cpp und swap.cpp wirklich völlig unabhängig voneinander compiliert werden. Wir kümmern uns zunächst nur um den ersten Fehler. Um diesen Fehler zu beseitigen, müßte in der Datei main.cpp Bescheid gesagt werden, daß es die sort-Funktion gibt.
Der eine Fehler ist weg. Die Methode, das zu erreichen war aber nicht schön. Schöner geht es mit Header-Dateien. Header-Dateien sind solche Dateien, die Sie immer mit #include inkludieren. Inkludieren Sie niemals eine cpp-Datei!
Die Anführungszeichen bedeuten dabei, daß der Compiler die Datei sort.h zuerst in dem Verzeichnis suchen soll, wo Ihre cpp-Dateien auch stehen. Das Kommando #include wirkt vor der eigentlichen Übersetzung durch den Compiler und kopiert einfach den Inhalt der inkludierten Datei in die gerade zu übersetzende Übersetzungseinheit. Zur Sicherheit ist es gut, wenn die Datei sort.cpp die Datei sort.h auch inkludiert.
Im folgenden wird es günstig sein, wenn Sie immer dasselbe Projekt für diesen Kurs verwenden. Lassen Sie die Datei, welche die main-Funktion enthält immer main.cpp heißen. In dieser Datei erstellen Sie auch die neuen Funktionen oder Klassen. Immer, wenn ein zusammengehöriger Satz von Funktion oder Klassen fertig ist, lagern Sie den neuen Code, sofern anzunehmen ist, daß Sie ihn wiederverwenden möchten, in eigene Dateien aus. In späteren Lektionen und Übungen können Sie dann die entsprechenden Funktionen oder Klassen einfach verwenden, indem Sie die entsprechende Header-Datei inkludieren. Falls Sie jetzt schon Lust haben, alle brauchbaren Sachen auszulagern, so beachten Sie bitte, daß Klassen (so, wie wir sie bisher geschrieben haben) nur in eine entsprechende Header-Datei gelegt werden. Bis auf weiteres brauchen Sie (im Gegensatz zu Funktionen) keine cpp-Dateien. Übung:Lagern Sie alle bisher erstellten Funktionen und Klassen in entsprechende Dateien aus. Dabei soll jede Klasse eine eigene Datei bekommen. Bei Funktionen entscheiden Sie, welche zusammengehören und wählen Sie aussagekräftige Dateinamen. Einsendungen:LösungsvorschlagFalls Ihnen Fehler im Text auffallen oder Sie Verbesserungsvorschläge haben, dann schicken Sie mir bitte eine Mail. Ich werde mich dann sofort darum kümmern. [aktuelle Version] [inhalt] [index] [Fehlerkorrektur, Verbesserungsvorschlag] © Volkard Henkel <volkard@normannia.de>, last update: 08/25/00 |