lit-web Geschrieben 2. Januar 2010 Geschrieben 2. Januar 2010 Hallo und allen noch nachträglich ein gesundes und erfolgreiches neues jahr 2010. Ich bin grad dabei C++ zu lernen und habe mir nun eine kleine simple Funktion geschrieben. Diese habe ich nun in eine extra Datei ausgelagert und wollte die in eine abhandelde Datei includet. Hie rmal mein Code der function_rechnen.cpp: /* * * funktion um eine flächen zu berechnen * */ float RechteckFlaeche(float wert1, float wert2, int koerperWahl){ float pi = 3.1415927; float ergebnis; /* * * berechnen der fläche nach ausgewähöten körper * */ switch(koerperWahl){ /* rechteck fläche */ case 1: ergebnis = wert1 * wert2; break; /* dreicksfläche */ case 2: ergebnis = wert1 * wert2 / 2; break; } /* * * flächenergebnis zurück geben * */ return ergebnis; } Und der Code der start.cpp wo die finction Datei includet wird bzw. werden soll #include <iostream> #ifdef function_rechnen.cpp using namespace std; int main() { /* * * initialisieren der variablen rechenwerte * */ float breite; float laenge; float flaeche; /* * * koerperwahl für berechnung * */ int koerperWahl; /* * * prüfen ob ein körper ausgewählt wurde * */ do{ cout << "Bitte wähöen Sie einen Körper für die Berechnung aus!\n"; cout << "1 = Rechteck\n"; cout << "2 = Dreieck\n"; cin >>koerperWahl; }while(koerperWahl < 1); /* * * eingabe aufforderungen mit prüfung ob eingegeben * */ do{ cout << "Bitte geben Sie eine Breite zur Berechnung ein!\n"; cin>>breite; }while(breite < 1); do{ cout << "Bitte geben Sie eine Laenge zur Berechnung ein!\n"; cin>>laenge; }while(laenge < 1); /* * * rechteckfläche wird hier nach einer funktion berechnet * */ flaeche = RechteckFlaeche(breite, laenge, koerperWahl); cout<<"Die eingegebene Breite: "<<breite<<" cm\n"; cout<<"Die eingegebene Laenge: "<<laenge<<" cm\n"; cout << "Die Flaeche des Rechteckes ist - "<< flaeche <<" cm"; cin.get(); } Ich verwende die IDE mit dem Mingw Compiler und bekomme da nun folgende Fehlermeldung C:\Dokumente und Einstellungen\litter\Eigene Dateien\c_plus_plus\erstes_programm\start.cpp|3|warning: extra tokens at end of #ifdef directive| C:\Dokumente und Einstellungen\litter\Eigene Dateien\c_plus_plus\erstes_programm\start.cpp|3|unterminated #ifdef| ||=== Build finished: 1 errors, 1 warnings ===| Habt ihr eine Idee was ich falsch mache? Bin komplett neu in C++. Vielen Dank für eure Zeit und euren Rat Mfg lit-web Zitieren
Klotzkopp Geschrieben 2. Januar 2010 Geschrieben 2. Januar 2010 Ich bin grad dabei C++ zu lernen und habe mir nun eine kleine simple Funktion geschrieben. Diese habe ich nun in eine extra Datei ausgelagert und wollte die in eine abhandelde Datei includet.So etwas tut man nicht. Wenn du etwas auslagern willst, solltest du eine Headerdatei anlegen, die die Deklarationen (und sonst nichts) für die ausgelagerten Teile enthält, und diese einbinden. Was du da machst, funktioniert nur für ganz einfache Fälle. Ich verwende die IDE mit dem Mingw CompilerEs gibt es mehrere IDEs, die MinGW als Compiler benutzen können. Welche benutzt du denn? Doch hoffentlich nicht Dev-C++? Davon lass besser die Finger. Habt ihr eine Idee was ich falsch mache?Die Direktive, die du suchst, heißt #include, nicht #ifdef. Außerdem solltest du den Dateinamen in spitze Klammern oder Anführungszeichen setzen. Aber wie gesagt, eigentlich solltest du andere Quellcodedateien gar nicht so einbinden. Zitieren
lit-web Geschrieben 2. Januar 2010 Autor Geschrieben 2. Januar 2010 (bearbeitet) Ok erst mal recht vielen Dank für deine Antwort. Aber wenn man das nicht via #include <function_rechnen.cpp> machen sollte wie denn dann? Ich bin nur PHP gewohnt und da kann ich mir einfach meine Dateien deren Code ich auslagern will normal mit include einbinden. Danke für weitere Antworten. [EDIT] Ich benutze nur CodeBlocks, manchmal auch Eclipse, aber sonst nichts. Also ich habe das mal so probiert jetzt #include <function_rechnen.cpp> Und da meckert er rum C:\Dokumente und Einstellungen\litter\Eigene Dateien\c_plus_plus\erstes_programm\start.cpp|3|function_rechnen.cpp: No such file or directory| C:\Dokumente und Einstellungen\litter\Eigene Dateien\c_plus_plus\erstes_programm\start.cpp||In function `int main()':| C:\Dokumente und Einstellungen\litter\Eigene Dateien\c_plus_plus\erstes_programm\start.cpp|66|error: `RechteckFlaeche' was not declared in this scope| ||=== Build finished: 2 errors, 0 warnings ===| C:\Dokumente und Einstellungen\litter\Eigene Dateien\c_plus_plus\erstes_programm\start.cpp|3|function_rechnen.cpp: No such file or directory| C:\Dokumente und Einstellungen\litter\Eigene Dateien\c_plus_plus\erstes_programm\start.cpp||In function `int main()':| C:\Dokumente und Einstellungen\litter\Eigene Dateien\c_plus_plus\erstes_programm\start.cpp|66|error: `RechteckFlaeche' was not declared in this scope| ||=== Build finished: 2 errors, 0 warnings ===| Bearbeitet 2. Januar 2010 von lit-web Zitieren
robotto7831a Geschrieben 2. Januar 2010 Geschrieben 2. Januar 2010 Hallo, man kann nicht wie bei PHP über die include Anweisung fremden Quellcode importieren der mit verwendet werden soll. Die Funktion RechteckFlaeche muss mit in die start.cpp. Die Präcompileranweisung #include wird erst bei der Verwendung von eigenen Klassen für dich interessant. Frank Zitieren
Bubble Geschrieben 2. Januar 2010 Geschrieben 2. Januar 2010 man kann nicht wie bei PHP über die include Anweisung fremden Quellcode importieren der mit verwendet werden soll. Grundsätzlich kann man das schon, es hat aber bei der Verwendung mehrerer compilation units Grenzen, da später beim Zusammenfügen dieser keine Namenskollisionen auftreten dürfen. Die Funktion RechteckFlaeche muss mit in die start.cpp. Wenn er man etwas per #include einbindet, dann ist dies nach dem Präprozessorlauf Teil der Datei. Um zukünftig anderen Problemen vorzubeugen, sollte die Funktion jedoch in eine eigene compilation unit ausgelagert werden und in anderen compilation units nur eine Deklaration der Funktion vorhanden sein. Diese Deklaration(en) kann man in eine Header-Datei schreiben und per #include einbinden. Die Präcompileranweisung #include wird erst bei der Verwendung von eigenen Klassen für dich interessant. So kann man das nicht sehen, #include braucht man auch, wenn man nicht objektorientiert programmiert. Zitieren
Klotzkopp Geschrieben 2. Januar 2010 Geschrieben 2. Januar 2010 wie denn dann?Man verteilt den Code auf Übersetzungseinheiten. Jede Übersetzungseinheit (ÜE) wird vom Compiler einzeln bearbeitet. Am Ende verbindet der Linker alles zu einem ausführbaren Programm. Eine ÜE ist eine .cpp-Datei. Wenn du in einer Datei Funktionen aus einer anderen brauchst, brauchst du nicht den vollständigen Code, sondern nur die Deklaration der Funktion. Die sieht in deinem Fall so aus: float RechteckFlaeche(float wert1, float wert2, int koerperWahl); In C nennt man das auch einen Prototypen. Das ist alles, was du brauchst, um in einer anderen .cpp-Datei diese Funktion nutzen zu können. Und damit man das nicht immer wieder hinschreiben muss, benutzt man sogenannte Headerdateien (Dateierweiterung .h). In denen stehen nur die Deklarationen der Funktionen (also kein Code). Diese Dateien kann man dann auch in mehreren .cpp-Dateien einbinden, ohne dass der Linker auf Probleme stößt. Also ich habe das mal so probiert jetzt #include <function_rechnen.cpp> [/code] Je nachdem, ob du spitze Klammern oder Anführungszeichen benutzt, sucht der Präprozessor an anderer Stelle nach der Datei. Vermutlich würde es mit Anführungszeichen funktionieren. Aber wie gesagt, erstell dir lieber gleich eine ordentliche Headerdatei. Die würde in etwa so aussehen: [code] #ifndef FUNCTION_RECHNEN_H_INCLUDED #define FUNCTION_RECHNEN_H_INCLUDED float RechteckFlaeche(float wert1, float wert2, int koerperWahl); #endif Das Konstrukt aus #ifndef/#define/#endif sind die sogenannten Include-Guards. Jede Headerdatei sollte so etwas haben. Das hat den Zweck, dass die mehrfache Einbindung dieser Headerdatei in dieselbe ÜE keine nachteilige Wirkung hat. Das kann schon mal passieren, wenn Header andere Header einbinden. Das Symbol FUNCTION_RECHNEN_H_INCLUDED muss keinen bestimmten Namen haben, es sollte nur für das Projekt eindeutig sein. Die Verwendung von Großbuchstaben ist auch kein Zwang, aber allgemein üblich. Diese Datei nennst du dann function_rechnen.h. Diese Datei kannst du dann in main.cpp mittels #include einbinden. Außerdem musst du natürlich die Datei function_rechnen.cpp dem Projekt hinzufügen, damit der Compiler sie auch bearbeitet. Zitieren
lit-web Geschrieben 3. Januar 2010 Autor Geschrieben 3. Januar 2010 Also erst mal vielen Dank für eure Zeit und Hilfe. Da ich ab 1 März eine Umschulung zum FIAE anfange will ich mich da ein wenig vorbereiten. Da ich weis das die da C++ ind Visual Basic als Programmiersprachen unterrichten will ich da eben ein wenig Vorkenntnisse sammeln und probieren. PHP stecke ich aus Selbstudium schon recht gut drin. Ein Frage noch, könnt Ihr mir ein Tutorial empfehlen wo ich nachlesen kann wie in C++ mit Fenstern arbeiten kann und Daten aus einem Formular verarbeiten kann? Ich habe versucht über Google was zu finden aber ehrlich sagen das ich mich wahrscheinlich aus mangelnder Erfahrung bei der Wahl der Suchbegriffe etwas dummelig angestellt haben könnte. Also habt mal wieder vielen Dank für eure Tipps. Mfg lit-web Zitieren
Klotzkopp Geschrieben 3. Januar 2010 Geschrieben 3. Januar 2010 Ein Frage noch, könnt Ihr mir ein Tutorial empfehlen wo ich nachlesen kann wie in C++ mit Fenstern arbeiten kann und Daten aus einem Formular verarbeiten kann?Grafische Benutzeroberflächen sind nicht Teil des C++-Standards, das ist der Teil, der überall einheitlich ist. Es gibt natürlich diverse Bibliotheken für grafische Benutzeroberflächen, manche nur für bestimmte Betriebssysteme, manche für mehrere. Wie man damit umgeht, hängt stark von der verwendeten Bibliothek ab. Allgemeine Informationen wirst du dazu also kaum finden. Du kannst dir jetzt ein MFC-Tutorial ansehen, aber davon hast du nicht viel, wenn du später Qt verwenden sollst. Diesbezüglich solltest du vielleicht zunächst abwarten, welche Bibliothek in deiner Umschulung verwendet wird. Zitieren
lit-web Geschrieben 3. Januar 2010 Autor Geschrieben 3. Januar 2010 Ok dann noch mal vielen Dank für eure Zeit und Antworten, wenn meine Schulung beginnt werde ich bestimmt öfter mal rein schauen :-) Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.