Fehler im Code
-
Hi,
ich hoffe, ich bin in der Sektion richtig. Ich bin gerade dabei von PHP auf C++ umzulernen und will eine Klasse schreiben, die einen Punkt in einem 3D-Koordinatensystem erstellt. Zum Testen des Scripts soll zum Schluss der Abstand (hyp) vom "Point" zum Nullpunkt rauskommen. Nur tu' ich mich wohl etwas mit der OOP-Syntax in schwer.
Mein Code sieht so aus:
#include <iostream> #include <math.h> class Point { public: int id; // ID des Punktes bool sight; // Ist dieser Punkt vom Nullpunkt aus sichtbar? float hyp; // Direkter Abstand zum Nullpunkt (Hypotenuse) float x; // X-Wert / Ankathede float y; // Y-Wert float z; // Z-Wert // Konstruktor: Point(int id, float x, float y, float z, bool sight) { this->id = id; this->x = x; this->y = y; this->z = z; this->sight = sight; } float getHyp(float x, float y, float z) { float a = y; float b = sqrt(pow(x, 2) + pow(z, 2)); float c = sqrt(pow(a, 2) + pow(b, 2)); return c; } } int main() { float hyp; Point = new Point(1, 3.0, 3.0, 3.0); hyp = Point->getHyp(Point1->x, Point1->y, Point1->z); cout << hyp << endl; return 1; }
Wäre ziehmlich super, wenn mir jemand sagen kann, was an dem Code falsch ist, weil mein Compiler folgende Fehler ausspuckt:
37 C:\Users\Michael\Documents\Point.class.cpp new types may not be defined in a return type
37 C:\Users\Michael\Documents\Point.class.cpp extraneousint' ignored 37 C:\\Users\\Michael\\Documents\\Point.class.cpp \
main' must return `int'40 C:\Users\Michael\Documents\Point.class.cpp expected primary-expression before '=' token
40 C:\Users\Michael\Documents\Point.class.cpp no matching function for call to `Point::Point(int, double, double, double)'41 C:\Users\Michael\Documents\Point.class.cpp expected primary-expression before '->' token
41 C:\Users\Michael\Documents\Point.class.cpp `Point1' undeclared (first use this function)43 C:\Users\Michael\Documents\Point.class.cpp
cout' undeclared (first use this function) 43 C:\\Users\\Michael\\Documents\\Point.class.cpp
endl' undeclared (first use this function)
Vielleicht findet jemand noch mehr Fehler, bzw. hat Tipps für mich.
-
- Klassendefinitionen müssen mit einem Semikolon abgeschlossen werden, wenn du nicht gleich auch noch eine Instanz der Klasse erstellen willst.
- Die Methode getHyp braucht keine Parameter, die Klasse kennt doch ihre Member. Du könntest damit andere Werte übergeben, aber wozu soll das gut sein?
- Was soll Point1 sein? Dieser Bezeichner wurde nirgends deklariert. Vielleicht der vergessene Variablenname? Oder möchtest du dich damit auf den id-Parameter beziehen? Das geht jedenfalls nicht, indem du einfach Zahlen an den Klassennamen dranhängst.
- Wenn du ein Objekt erstellen willst, musst du erst eine Variable mit passendem Typ deklarieren. "Point =" ist also Quatsch, da ist kein Variablenname drin. Du schreibst ja auch nicht "float =".
- Beim Konstruktoraufruf fehlt der bool-Parameter.
- Wenn du ein Objekt mit new erzeugst, brauchst du eine Zeigervariable.
- Wenn du ein Objekt mit new erzeugst, musst du auch dafür sorgen, es wieder freizugeben, sonst hast du ein Speicherleck.
Überhaupt müsstest du das Objekt gar nicht mit new erzeugen:
int main() { Point Point1(1, 3.0, 3.0, 3.0); float hyp = Point1.getHyp(); cout << hyp << endl; }
-
Vielen Dank für die rasche Antwort!
Die 3 Fehler aus Zeile 37 sind nun weg.edit:
mein code sieht nun so aus:#include <iostream> #include <math.h> class Point { public: int id; // ID des Punktes bool sight; // Ist dieser Punkt vom Nullpunkt aus sichtbar? float hyp; // Direkter Abstand zum Nullpunkt (Hypotenuse) float x; // X-Wert / Ankathede float y; // Y-Wert float z; // Z-Wert // Konstruktor: Point(int id, float x, float y, float z, bool sight) { this->id = id; this->x = x; this->y = y; this->z = z; this->sight = sight; } float getHyp(float x, float y, float z) { float a = y; float b = sqrt(pow(x, 2) + pow(z, 2)); float c = sqrt(pow(a, 2) + pow(b, 2)); return c; } }; int main() { float hyp; Point *zeiger = new Point(1, 3.0, 3.0, 3.0, true); hyp = zeiger->getHyp(zeiger->x, zeiger->y, zeiger->z); cout << hyp << endl; return 1; }
Jetzt gilt es noch den Fehler mit cout und endl zu beheben. die lib <iostream> ist ja korrekt eingebunde noder nicht?
-
spitfire92 schrieb:
Vor allem komisch finde ich den Fehler, dass "cout" scheinbar undefiniert sein soll, obwohl die <iostream> eingebunden wurde.
Das liegt daran, dass cout im Namespace std liegt. Es muss also std::cout heißen.
Du könntest auch in main eine using-Direktive machen, dann musst du nicht jedesmal std:: schreiben.
-
Vielen Dank für die grosse Hilfe, funktioniert nun endlich (:
-
//Konstruktor: Point(int id, float x, float y, float z, bool sight) { this->id = id; this->x = x; this->y = y; this->z = z; this->sight = sight; } float getHyp(float x, float y, float z) { float a = y; float b = sqrt(pow(x, 2) + pow(z, 2)); float c = sqrt(pow(a, 2) + pow(b, 2)); return c; }
Wieso legst du extra Kopien an? Dann ändert sich doch die Lokale Variable der Funktion und nicht die eigentliche aus der Klasse. Oder nicht?
-
wollte bloß mal fragen was ich für einen Fehler in der folgente While Schleife habe.
Weil bei mir fragt sie immer nur eine Abfrage ab.while((blueValue !=30)&&(greenValue!= 25)&&(redValue!=227))
//* wenn bluevalue=30 and greenValue=25 and redvalue = 227 dann.....
{
....
}
-
zwingling schrieb:
wollte bloß mal fragen was ich für einen Fehler in der folgente While Schleife habe.
Weil bei mir fragt sie immer nur eine Abfrage ab.while((blueValue !=30)&&(greenValue!= 25)&&(redValue!=227)) //* wenn bluevalue=30 and greenValue=25 and redvalue = 227 dann..... { .... }
Wie jetzt?
Dein Kommentar stimmt mit deiner Bedingung überhaupt nicht überein...
Willst du das gefragt wird:
while((blue != 30) && (green != 25) && (red!=227)) //DoSomething()...
!= bedeutet nicht ( Ist nicht (Verneinung) )
//* wenn bluevalue=30 and greenValue=25 and redvalue = 227 dann.....
Dein Kommentar bedeutet aber genau das:
while((blue == 30) && (green == 25) && (red == 227)) //DoSomething()...
Lg
-
Danke.
Nun funktioniert mein Prog
-
zwingling schrieb:
Danke.
Nun funktioniert mein ProgImmer wieder gerne