Datei kann nicht "includeed" werden! Compiler stürtz ab



  • Erst mal der Code von der Datei die nicht eingebunden werden kann

    #include <iostream>
    #include "Game.cpp"
    
    using namespace std;
    
    class CRaumschiff
    {
          public:
    
                 int Energie;
                 int Geschwindigkeit;
                 //CGame *pRaumschiffauswahl;
    
    //Zeige Daten
    //
    //Aufgabe: Daten des Raumschiffes Zeigen
    //
     void ZeigeDaten ()
                 {
                      cout << "Energie" << Energie <<"!\n";
                      cout << "Geschwindigkeit" << Geschwindigkeit << "!\n";
                   //   cout << "Raumschiffauswahl" << pRaumschiffauswahl << endl;
                 }
    
    };
    

    Kaum versuche ich diese Datei in die Datei main.cpp einzubinden bleigt der Compieler hängen u. reagiert nicht mehr!
    Kann mir jemand helfen?
    Hier noch die main.cpp Datei

    #include <iostream>
    #include "Game.cpp"
    #include "Raumschiff.cpp"
    
    using namespace std;
    
    int main(/*int argc, char *argv[]*/)
    {
    
        char Auswahl;
        cout << "Hallo, willkommen bei dem VERSUCH \n";
        cout << "Du wirst nun eine Waffe waehlen muessen\n";
        cout << "los gehts\n";
        cout << "Um das Spiel zu starten bitte (s)tart\n";
        cout << "Um das Spiel zu beenden bitte (b)eenden\n";
        do
        {
        if (Auswahl != 's' && Auswahl != 'S' && Auswahl != 'B' && Auswahl != 'b')
           cin  >> Auswahl;
           if (Auswahl != 's' && Auswahl != 'S' && Auswahl != 'B' && Auswahl != 'b')
                   cout << "Falsche eingabe \n";
        if (Auswahl == 's' || Auswahl == 'S')
           {
           cout << "Los gehts\n";
        //Hier kommt das Hauptprogramm:
        //
        //
        //Start:
    
        CGame Game;
        Game.aufgehts()   ; 
      //  CRaumschiff Raumschiff1
      //  Raumschiff1.Zeige Daten ();
    }
        else if (Auswahl == 'b' || Auswahl == 'B')
           cout << "Dann halt nicht\n";
        }while (Auswahl != 's' && Auswahl != 'S' && Auswahl != 'B' && Auswahl != 'b');
    
        system("PAUSE");
        return EXIT_SUCCESS;
        //return 0;
    }
    

    und vollständigkeitshalber auch die letzte (Game.cpp) Datei

    #include <iostream>
    //#include "Raumschiff.cpp"
    
    using namespace std;
    
    class CGame
    {
          public:
    
                 char Raumschiffauswahl;
    
                 void aufgehts ()
                 {
                       cout << "Waehlen sie die Daten fuer ihr Raumschiff" << endl;
                       cout << "Fuer ein schnelles Raumschiff druecken sie (s)chnell" << endl;
                       cout << "Fuer ein grosses Raumschiff druecken sie (b)ig" << endl;
                       do
                         {
                          if (Raumschiffauswahl != 's' && Raumschiffauswahl != 'S' && Raumschiffauswahl != 'B' && Raumschiffauswahl != 'b')
                             cin  >> Raumschiffauswahl;
                                  if (Raumschiffauswahl != 's' && Raumschiffauswahl != 'S' && Raumschiffauswahl != 'B' && Raumschiffauswahl != 'b')
                                     cout << "Falsche eingabe \n";
                          }while (Raumschiffauswahl != 's' && Raumschiffauswahl != 'S' && Raumschiffauswahl != 'B' && Raumschiffauswahl != 'b');
                       //CRaumschiff Raumschiff1;
                       //Raumschiff1.ZeigeDaten ;                  
                 }
    
    };
    

    So funktioniert das Programm einwandfrei da die Klasse CRaumschiff nicht angerührt wird aber kaum will ich sie einbinden ...



  • klassen definiert man in headerdateien 😛



  • Man sollte auch .cpp-Dateien nicht includen, sondern nur die dazu gehörigen header.

    Die .cpp sollte man dann seperat kompilieren und später zusammen-linken.



  • #if !defined SPACE_SHIP_H__INCLUDED
    #define SPACE_SHIP_H__INCLUDED
    
    #if (_MSC_VER > 1000)
    #pragma once
    #endif // _MSC_VER > 1000
    
    #include <iostream>
    #include <string>
    
    // using namespace std; niemals in einem HEADER!
    
    class SpaceShip
    {
    public:
        SpaceShip() : m_energie(0), m_speed(0) {}
    private:
        unsigned short m_energie;
        unsigned int m_speed;
        std::string m_name;
    
    public:
        void show_energie() const { std::cout << "- Energie: " << m_energie << std::endl; }
        void show_speed() const { std::cout << "- Geschwindigkeit: " << m_speed << std::endl; }
        void show_data() const { std::cout << "." << m_name << ": " << std::endl; show_energie(); show_speed(); }
    };
    
    #endif // SPACE_SHIP_H__INCLUDED
    

    ...

    #include <iostream>
    #include "Game.h"
    #include "spaceship.h"
    
    int main()
    {
        bool close = false;
        while (close == false)
        {
            std::cout << "Versuch V0.1BETA" << std::endl;
            std::cout << "(1) Starten" << std::endl;
            std::cout << "(2) Beenden" << std::endl;
    
            unsigned short sel = 0;
            while (!(std::cin >> sel) || sel > 2 || sel < 1) { std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); }
            switch (sel)
            {
            case 1: 
            { /* mach halt was */ } break;
            case 2:
            { close = true; } break;
            }
        }
        /*
        std::cin.clear();    
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        std::cin.get(); */ // anstelle von std::system("pause"); ... viel besser! 
    }
    


  • Des mit den hpp Dateien wusste ich aber ürgendwie funktioniert das nicht mit Dev C++!
    Kann mir da jemand helfen wie ich des da schaffe!
    Danke für die bisjetzt angekommen antworten



  • Wo ist dein Problem? Leg eine Datei "spaceship.h" an und pack da den 1. Code rein den ich gepostet hab. Dann eine Datei "main.cpp" wo du den 2. reinpackst. Eine 3. Datei namens "game.h" wo du dann deine Game-Klasse reinpackst. Das alles fügst du dann zu deinem Projekt hinzu... achja ... nimm lieber Visual C++ 2005 Express Edition ... ist auch kostenlos und einfacher zu nutzen als auch besser ^^



  • ne ich bin dagegen (siehe meine Signatur)



  • Krux schrieb:

    ne ich bin dagegen (siehe meine Signatur)

    Code::Blocks mit aktuellem MinGW...



  • Hab keine Orig. version nur Authoren also -> keine Exe 🙄



  • @Krux: Begründung?
    @greece57: Solange Krux keine sinnvolle Begründung gibt, warum du nicht Microsoft Visual C++ 2005 Express Edition nutzen solltest, würde ich dir empfehlen umzusteigen!



  • Danke (:
    Ne ich wills halt combilen! u. das geht mit der authoren version





  • danke!
    Warum geht das nicht?:

    case 1: 
            { 
              CGame Game;
              Game.aufgehts();
              CSpaceship Spaceship;
              Spaceship show_energie();
            } break;
    

    Ich will die Funktion show_energie aufrufen wie mach ich das?



  • Spaceship.show_energie();
    


  • geht nicht
    Spaceship.show_energie();



  • in deinem Code auf der ersten Seite gibt es auch keine Funktion "show_energie()", du musst sie schon deklarieren und implementieren.

    FEHLERMELDUNGEN MITPOSTEN
    "GEHT NICHT" IST KEINE FEHLERMELDUNG



  • doch ich hab ja den von Evil korrigierten code genommen!!
    Fehlermeldung kommt gleich



  • So ich hab die Fehler jetzt bereinigt aber wie ist es so schön?
    Genau
    Kommt gleich ein neues Problem:
    Wie kann ich die Variable

    Raumschiffauswahl
    

    in SpaceShip.h verwenden?
    hier ist Game.h:

    #if !defined GAME_H__INCLUDED 
    #define GAME_H__INCLUDED 
    
    #if (_MSC_VER > 1000) 
    #pragma once 
    #endif // _MSC_VER > 1000 
    
    #include <iostream> 
    #include <string> 
    
    class Game
    {
          public:
    
                 char Raumschiffauswahl;
    
                 void aufgehts ()
                 {
                      std::cout << "Waehlen sie die Daten fuer ihr Raumschiff" << std::endl;
                      std::cout << "Fuer ein schnelles Raumschiff druecken sie (s)chnell" << std::endl;
                      std::cout << "Fuer ein grosses Raumschiff druecken sie (b)ig" << std::endl;
                       do
                         {
                          if (Raumschiffauswahl != 's' && Raumschiffauswahl != 'S' && Raumschiffauswahl != 'B' && Raumschiffauswahl != 'b')
                             std::cin  >> Raumschiffauswahl;
                                  if (Raumschiffauswahl != 's' && Raumschiffauswahl != 'S' && Raumschiffauswahl != 'B' && Raumschiffauswahl != 'b')
                                     std::cout << "Falsche eingabe" << std::endl;
                          }while (Raumschiffauswahl != 's' && Raumschiffauswahl != 'S' && Raumschiffauswahl != 'B' && Raumschiffauswahl != 'b');
                 }
    
    };
    #endif // GAME_H__INCLUDED
    

    und hier ist SpaceShip.h:

    #if !defined SPACE_SHIP_H__INCLUDED 
    #define SPACE_SHIP_H__INCLUDED 
    
    #if (_MSC_VER > 1000) 
    #pragma once 
    #endif // _MSC_VER > 1000 
    
    #include <iostream> 
    #include <string> 
    #include "game.h"
    
    // using namespace std; niemals in einem HEADER! 
    
    class SpaceShip 
    { 
    public: 
        SpaceShip() : m_energie(0), m_speed(0) {} 
    private: 
        unsigned short m_energie; 
        unsigned int m_speed; 
        std::string m_name; 
        Game *pRaumschiffauswahl;
    
    public: 
        void UpdateSpaceShip ()
        {
             if (*pRaumschiffauswahl == 's' || *pRaumschiffauswahl == 'S')
                {
                m_energie = 100;
                m_speed = 500;
                }
             else if (*pRaumschiffauswahl == 'b' || *pRaumschiffauswahl == 'B')
                 {
                  m_energie = 500;
                  m_speed = 100;
                  }
             else
                  std::cout << "Falsche Eingabe" << std::endl;
        }
        void show_energie() const { std::cout << "- Energie: " << m_energie << "km/h" << std::endl; } 
        void show_speed() const { std::cout << "- Geschwindigkeit: " << m_speed << std::endl; } 
        void show_data() const { std::cout << "." << m_name << ": " << std::endl; show_energie(); show_speed(); }
    }; 
    
    #endif // SPACE_SHIP_H__INCLUDED
    

    Hier taucht der Fehler auf:
    no match for 'operator==' in ((SpaceShip)this)->SpaceShip::pRaumschiffauswahl == 's'

    das gleiche für 'S' ; 'b' und 'B'

    und wenn ich die Zeile so schreibe was meiner Meinung nach eigentlich kompletter blödsinn ist:

    if (SpaceShip::pRaumschiffauswahl == 's' || SpaceShip::pRaumschiffauswahl == 'S')
    

    kommt der Fehler
    ISO C++ forbids comparison between pointer and integer

    Bitte helft mir

    AJA falls ich es so schreibe

    char *pRaumschiffauswahl;
    
    public: 
        void UpdateSpaceShip ()
        {
             if (*pRaumschiffauswahl == 's' || *pRaumschiffauswahl == 'S')
                {
                m_energie = 100;
                m_speed = 500;
                }
             else if (*pRaumschiffauswahl == 'b' || *pRaumschiffauswahl == 'B')
                 {
                  m_energie = 500;
                  m_speed = 100;
                  }
             else
                  std::cout << "Falsche Eingabe" << std::endl;
        }
    

    geht es zwar aber er geht in die else schleife:

    std::cout << "Falsche Eingabe" << std::cout;
    


  • Krux schrieb:

    ne ich bin dagegen (siehe meine Signatur)

    Wenn Du es denn wenigstens endlich mal korrekt schreiben würdest. 👎


Anmelden zum Antworten