Was mache ich falsch? (Templates)
-
Hallo Liebe Proggs
Mein Compiler spuckt nur noch Fehler aus
Ich haben mich an Template Klassen (in einer Headerdatei)
versucht
Hier mein Code:(Header)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) { cout << "Raus aus dem Wagen...Schnell!!" << endl; } else(m_Bremsweg >= 50) { cout << "Jetzt aber scharf bremsen!!" << endl; } } else(m_Geschwindigkeit <=100.0f) { if(m_Bremsweg <= 50) { cout << "Jetzt aber scharf bremsen!!" << endl; } else (m_Bremsweg >= 50) { cout << "Ruisch,Brauner,Ruisch..." << endl; } } } CRaumschiff<Y,X>::CRaumschiff (Y Geschwindigkeit,X Bremsweg) { m_Geschwindigkeit = Geschwindigkeit; m_Bremsweg = Bremsweg; }Und hier meine Quell Datei:
#include <iostream> #include "bklassen.hpp" using namespace std; int main() { CRaumschiff<float,int> Spieler (Geschwindigkeit,Bremsweg); cout << "Berechne Unfallrisiko!\nGeben sie ihre genaue Geschwindigkeit an: "; cin >> Speed; cout << endl << "Geben sie ihren Bremsweg an: "; cin << Burn; Spieler.BerechneUnfallrisiko(Geschwindigkeit,Bremsweg); return 0; }Ich entschuldige mich jetzt schon für alle Schusselfehler..
-
Erstens würde es uns die Angelegenheit erleichtern, wenn wir mehr wissen als "da gibt es einen Fehler" - der Compiler liefert normalerweise sehr ausführliche Beschreibungen zu einem Problem, und selbst wenn du sie nicht verstehst, können wir damit dein Problem eingrenzen.
Zweitens: Vor Zeile 48 fehlt die Angabe, daß jetzt eine Template-Funktion folgt.
Drittens: Was für einen Sinn hat das Template überhaupt? Die Funktion dort würde genausogut funktionieren, wenn sie in einer normalen Klasse mit zwei double-Membern leben würde.
-
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
