Zum Inhalt springen

Problem beim includen einer c++ Datei in eine andere c++ Datei


Empfohlene Beiträge

Geschrieben

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

Geschrieben
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 Compiler
Es 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.
Geschrieben (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 von lit-web
Geschrieben

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

Geschrieben

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.

Geschrieben
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.

Geschrieben

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

Geschrieben
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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...