Funktion auslagern - Headerdateien
-
Hallo,
ich arbeite mich zur Zeit mit dem Buch "C++ lernen und professionell anwenden" in C++ ein.
Mit einem eigenen kleinen Testprogramm möchte ich ein paar Funktionen in eine seperate Datei auslagern. Dazu habe ich die Datei "change.h" und "change.cpp" neben der Hauptdateil "main.cpp" erstellt.
main.ccp
#include <iostream> #include "change.h" using namespace std; int main() { int a; int b; int erg; char op; cout << "Geben Sie die erste Zahl ein: "; cin >> a; cout << "Geben Sie die zweite Zahl ein: "; cin >> b; cout << "Waehlen Sie die gewuenschte Rechenoperation: "; cin >> op; cout << endl; if(op == '+') { erg = add(a,b); } else if(op == '-') { erg = subtract(a,b); } else if(op == '/') { erg = multiply(a,b); } else { erg = divide(a,b); } cout << "Das Ergebnis lautet :" << erg << endl; return 0; }
change.h
int add(int a, int b); int subtract(int a, int b); int multiply(int a, int b); int divide(int a, int b);
change.cpp
int add(int a, int b) { int erg; erg = a + b; return erg; } int subtract(int a, int b) { int erg; erg = a - b; return erg; } int multiply(int a, int b) { int erg; erg = a * b; return erg; } int divide(int a, int b) { int erg; erg = a / b; return erg; }
Laut meinem Buch sollte dies nun funktionieren. Die Headerdatei ist in main.cpp angegeben. Wenn ich nun aber das Projekt compilieren möchte, erhalte ich pro ausgelagerte Funktion folgende Fehlermeldungen:
main.cpp:30: undefined reference to `add(int, int)'
Woran liegt das? Ich verwende als IDE Code::Blocks!
Danke euch!
Grüße,
Flasher
-
Liegen die Dateien change.h/cpp im richtigen Ordner? Bzw hast du sie schon gespeichert?
-
Hi!
Sie liegen im gleichen Ordner wie die main.cpp.
Also im Hauptverzeichnis des Projekts!Gruß,
Flasher
-
Du musst die Datei change.h auch in change.cpp inkludieren. Hast du das getan?
-
Nein, habe ich nicht!
Warum muss ich das machen?
Es funktioniert mittlerweile! Ich habe bei der change.h Datei unter Properties "Link file" und "Compile File" deaktiviert und seitdem funktioniert es!
Bin aber für weiter Hintergrundinformationen sehr dankbar!
-
Um dem Compiler mitzuteilen wo die korrekte Definition liegt.
-
David_pb schrieb:
Um dem Compiler mitzuteilen wo die korrekte Definition liegt.
Wenn ich mich einmischen darf, kann mir jemand mehr dazu sagen? Ich habe auch Schwierigkeiten, das zu verstehen...
Wenn in der change.cpp bereits Funktionsdefinitionen sind, warum braucht sie dann noch die Deklarationen? :confuzzled:
-
Soweit ich weiss MUSS man die NICHT immer mit inkludieren, sollte es aber meistens. Irgendwann hatte mir das hustbaer glaub ich (sry falls es ein anderer war) mal beantwortet.... und beschaemenderweise merk ich grad, dass ich es vergessen habe.... entschuldige bitte, diesma wirds abgespeichert
-
Flasher.d84 schrieb:
Nein, habe ich nicht!
Warum muss ich das machen?
Es funktioniert mittlerweile! Ich habe bei der change.h Datei unter Properties "Link file" und "Compile File" deaktiviert und seitdem funktioniert es!
Bin aber für weiter Hintergrundinformationen sehr dankbar!
Im Prinzip musst du nicht, wenn die Definition für sich stehen kann. Allerdings benötigst du häufig auch noch Typdeklarationen und -definitionen (ohne Klassendefinition kannst du auch keinen Memberfunktionen definieren) oder andere Funktionen, die in anderen ÜEs oder erst später im selben File definiert werden. Selbst wenn das nicht der Fall ist, kann das inkludieren nützlich sein, um bestimmten Inkonsistenzen auf die Spur zu kommen.
-
Hi!
Dieser Thread ist ja schon ziermlich alt, aber ich wollte keinen neuen aufmachen.
Kann mir jemand erklären wie ich Funktionen in andere Dateien auslaggern kann?!
Ich mache gerade einen Taschenrechner mit so fast allen Rechenfunktion für Grundrechenarte, Körper- und Flächenberechnung, Prozentrechnung....
Wie ihr euch vorstellen könnt ist der Quelltext eeeeeeeeewig lang!
Wie kann ich die einzellenen Funktionen nun in seperate Dateien auslaggern!?
-
Wenn du schon alte Threads rauskramst, dann lies sie dir doch wenigstens durch.
Du brauchst:
- einen Header "function.h" mit allen Funktionsprototypen und Hilfsdeklarationen (Include Guards sind hier hilfreich)
- eine Quelldatei "function.cpp" mit den zugehörigen Funktionsdefinitionen - diese braucht ein
#include "function.h"
am Anfang - eine Quelldatei "main.cpp" mit deinem Hauptprogramm - diese braucht ebenfalls ein #include
Alle drei Dateien packst du in ein Projekt und compilierst/linkst sie dann gemeinsam (wie genau du das machst, hängt von deinem Compiler ab).
-
Hab die ganze Zeit versucht das mit den auslagern Hinzubekommen!
Nur irgendwie bekomme ich das nicht hin!
Auch die vorhergehenden Beiträge lassen mich nicht weiter kommen!Kann mir das mal jemand mit richtigen Quelltext zeigen!?
___________________________________________________________________________________Ich benutz den DevC++ Kompilier