Was mache ich falsch? (Templates)



  • Ja^^ ich würde nur gerne mit Templates üben (C++ für Spieleprogrammierer,Heiko Kalista)

    Hier sind die Fehler:

    1>c:\users\josh\documents\visual studio 2010\projects\tklassen\tklassen.cpp(11): error C2065: 'Speed': nichtdeklarierter Bezeichner
    1>c:\users\josh\documents\visual studio 2010\projects\tklassen\tklassen.cpp(14): error C2065: 'Burn': nichtdeklarierter Bezeichner
    1>c:\users\josh\documents\visual studio 2010\projects\tklassen\tklassen.cpp(16): error C2065: 'Geschwindigkeit': nichtdeklarierter Bezeichner
    1>c:\users\josh\documents\visual studio 2010\projects\tklassen\tklassen.cpp(16): error C2065: 'Bremsweg': nichtdeklarierter Bezeichner



  • Du hast auch keine Variablen mit diesen Namen angegeben - da ist es eigentlich erstaunlich, daß Zeile 7 anstandslos akzeptiert wurde.
    Besser sieht es so aus:

    float Speed;
        int Burn;    
    
        cout << "Berechne Unfallrisiko!\nGeben sie ihre genaue Geschwindigkeit an: ";
        cin >> Speed;
    
        cout << endl << "Geben sie ihren Bremsweg an: ";
        cin << Burn;
    
        CRaumschiff<float,int> Spieler(Speed,Burn)
        Spieler.BerechneUnfallrisiko(Speed,Burn);
    
        return 0;
    

    PS: Wozu übernimmt die Funktion eigentlich Parameter, wenn sie dann mit den Klassen-Elementen rechnet?



  • Hm jetzt kommt ein anderer hinzu

    1>c:\users\josh\documents\visual studio 2010\projects\tklassen\bklassen.hpp(10): error C2143: Syntaxfehler: Es fehlt ';' vor '}'
    1> c:\users\josh\documents\visual studio 2010\projects\tklassen\bklassen.hpp(10): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "CRaumschiff<Y,X>".
    1>c:\users\josh\documents\visual studio 2010\projects\tklassen\bklassen.hpp(10): error C2143: Syntaxfehler: Es fehlt ';' vor '}'
    1> c:\users\josh\documents\visual studio 2010\projects\tklassen\tklassen.cpp(17): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "CRaumschiff<Y,X>".
    1> with
    1> [
    1> Y=float,
    1> X=int
    1> ]

    es fehlt aber kein ; davor



  • Dazu kommen einige Fehler in der Header-Datei.

    X m_Bremsweg:
    
    else(m_Bremsweg >= 50)
    

    cout ohne std:: davor usw.

    Habs mal so angepasst, dass es zumindest fehlerfrei kompiliert.

    template <class Y,class X>
    class CRaumschiff
    {
    private:
        Y m_Geschwindigkeit;
        X m_Bremsweg;
    public:
    
        CRaumschiff (Y Geschwindigkeit, X Bremsweg);
    
        void BerechneUnfallrisiko (Y Geschwindigkeit, X Bremsweg);
    };
    
    template <class Y,class X>
    void CRaumschiff<Y,X>::BerechneUnfallrisiko (Y Geschwindigkeit, X Bremsweg)
        {
    
            if(m_Geschwindigkeit >= 100.0f)
             {
                 if(m_Bremsweg <= 50)
                 {
                           std::cout << "Raus aus dem Wagen...Schnell!!" << std::endl;
                 }      
                 else if(m_Bremsweg >= 50)
                 {
                     std::cout << "Jetzt aber scharf bremsen!!" << std::endl;
                 }
            }
    
             else if(m_Geschwindigkeit <=100.0f)
             {
    
                      if(m_Bremsweg <= 50)
                      {  
                          std::cout << "Jetzt aber scharf bremsen!!" << std::endl;
                      }
                      else if(m_Bremsweg >= 50)
                      {  
                          std::cout << "Ruisch,Brauner,Ruisch..." << std::endl;
                      }
    
            }
    }
    
    template <class Y,class X>
    CRaumschiff<Y,X>::CRaumschiff (Y Geschwindigkeit,X Bremsweg)
        {
        m_Geschwindigkeit = Geschwindigkeit;
        m_Bremsweg = Bremsweg;
        }
    

    Die schon von CStoll veränderte main.cpp brauchte dann aber auch noch eine weitere Anpassung. Die Richtung vom Stream-Operator an cin hat nicht gestimmt. 😉

    #include <iostream>
    #include "bklassen.hpp"
    using namespace std;
    
    int main()
    {
        float Speed;
        int Burn;    
    
        cout << "Berechne Unfallrisiko!\nGeben sie ihre genaue Geschwindigkeit an: ";
        cin >> Speed;
    
        cout << endl << "Geben sie ihren Bremsweg an: ";
        cin >> Burn;
    
        CRaumschiff<float,int> Spieler(Speed,Burn);
        Spieler.BerechneUnfallrisiko(Speed,Burn);
    
        return 0;
    }
    

    So sollte es gehen. Ob es dann auch das tut, was es soll, weiß ich nicht.



  • Die vorigen Fehler sind weg ....



  • Ja es klappt!!! Danke :p



  • crashjosh schrieb:

    Hm jetzt kommt ein anderer hinzu

    1>c:\users\josh\documents\visual studio 2010\projects\tklassen\bklassen.hpp(10): error C2143: Syntaxfehler: Es fehlt ';' vor '}'

    es fehlt aber kein ; davor

    Doch, in deinem obigen Code fehlte ein Semikolon am Ende der Methoden-Deklaration von BerechneUnfallrisiko().

    Ansonsten ist immer noch die Frage offen, wozu diese Funktion überhaupt Parameter entgegennimmt, wenn sie danach mit den (vom Konstruktor gefüllten) Klassen-Membern arbeitet.

    @Dobi: Den falschen Operator hatte ich aus Josh's Beitrag kopiert.



  • Dann war das ein Druckfehler im Buch 😉



  • @CStoll: Jupp, hatte ich gesehn, den Satz aber wohl nicht ganz eindeutig formuliert. Dass du nicht vor hattest, irgendwas in cin zu schieben, war für mich selbstverständlich. 😉

    Edit: Ich meine natürlich: Jaja, das kann im Nachhinein jeder sagen. Und den Eingangspost hast du bestimmt jetzt auch noch einfach editiert, um Beweise zu fälschen. :p



  • Auf Frischer Tat ertappt... 😮
    Neindas mit dem Druckfehler stimmte ,denn ich habe die 1.
    Und 3. Auflage des Buches und ham' geschusselt :o



  • Du warst doch gar nicht gemeint. 😃
    Aber was du noch machen könntest, wäre einheitlicher einzurücken. Macht die ganze Sache übersichtlicher.



  • Dobi schrieb:

    Edit: Ich meine natürlich: Jaja, das kann im Nachhinein jeder sagen. Und den Eingangspost hast du bestimmt jetzt auch noch einfach editiert, um Beweise zu fälschen. :p

    Also das würdest du sehen - und in fremden Beiträgen pfusche ich auch nur herum, wenn ich einen echten Grund dafür habe 😃


Anmelden zum Antworten