Augabe von Koordinaten
-
Hey, ich habe eine Aufgabenstellung in einer Klausur:
Zur datenmässigen Behandlung geometrischer Objekte ist zunächst eine Klasse Point zur
Erfassung einzelner Punkte im 3-dimensionalen Raum vonn¨oten.
Jeder Punkt wird durch seine Koordinaten (x, y, z) eindeutig gekennzeichnet.
Die Klasse enthalte folgende Member-Daten und Methoden:
• private Member: Gleitkomma-Feld coord mit 3 Elementen
• ¨offentliche Methoden:
– Konstruktor ohne Parameter (setzt alle Koordinaten auf Null)
– Konstruktor mit Parametern zur Besetzung aller Koordinaten.
Es sollen 1, 2 oder 3 Parameter verarbeitet werden k¨onnen. Bei fehlenden Para-
metern werden die entsprechenden Member auf Null gesetzt.
– Eine Ausgabefunktion anzeigen() zur Ausgabe der Koordinaten.
Schreiben Sie diese Klasse mit den erw¨ahnten Daten und Methoden (die auch als inline-
Methoden realisiert werden k¨onnen).Schreiben Sie auch eine Testfunktion main() , in der vier Punkte mit unterschiedlicher
Anzahl von Parametern angelegt werden.
( z.B. p1 = (0, 0, 0) ; p2 = (1, 0, 0) ; p2 = (1, 2, 0) und p3 = (1, 2, 3) )Das hier ist mein Programm dazu aber ich bekomme da immer ne Fehlermeldung. Kann mir evtl jemand bei dem Problem weiterhelfen?
#include <iostream.h> #include <math.h> #include <conio.h> #include <stdlib.h> #include <conio.h> using namespace std; class Point { private: float coord[2]; public: Point(){} /*Point(void) { coord[0] = 0; coord[1] = 0; coord[2] = 0; } */ Point(float c[]) { coord[0] = c[0]; coord[1] = c[1]; coord[2] = c[2]; } void anzeigen() { cout << coord << endl; } }; int main() { Point Punkte[4] = { Point(1,2,3), Point(1,2,3), Point(1,2,3), Point(1,2,3), }; Punkte[0].anzeigen(); /*Point b(1); b.anzeigen(); Point c(1,2); c.anzeigen(); /*Point d(1,2,3); d.anzeigen();*/ system("pause"); return 0; }
-
Welche Fehlermeldung? Ich bekomme schon in der ersten Zeile einen Fehler, weil es iostream.h seit 12 Jahren nicht mehr gibt. Aber vielleicht hast du ja einen derart alten Compiler, dass es bei dir funktioniert. Daher: Genaue Fehlerbeschreibung!
P.S.: Außerdem fasst dein coord nur zwei Werte, du packst aber 3 rein. math.h ist bloß ein Kompatibilitätsheader für C und gilt als veraltet, ebenso stdlib.h. conio.h ist gar kein Standardheader, sondern ein (uralter) DOS-Konsolenheader, außerdem wird es durch doppeltes Include nicht besser. Aus math.h und conio.h benutzt du soweit ich das sehe ohnehin nichts. system("PAUSE") ist ebenfalls suboptimal, siehe FAQ.
Außerdem übergibst du dem Konstruktor in Zeile 49ff drei Einzelwerte, obwohl ein Array erwartet wird. Dies ist (vermutlich) der Fehler den du meinst.
-
also ich benutze dev-c++ da wir den compiler auch in der uni verwenden. das ich dort iostream.h verwende liegt auch nur daran, dass wir das in der UNI so gelehrt bekommen ;).
die fehlermeldung lautet:
In function
int main()': 49 no matching function for call toPoint::Point(int, int, int)'
candidates are: Point::Point(const Point&)
Point::Point(float*)
Point::Point()und der fehler taucht noch in zeile 50,51 und 52 auf.
-
Habe oben noch was reineditiert, während du geantwortet hast. Sieht so aus als hätte ich richtig geraten, welchen der Fehler du meinst.
P.S.: Arme Uni, an der du bist, können sich noch nicht einmal einen modernen Gratiscompiler leisten
.
-
ja das mit dem veraltet hab ich schon öfter gehört, aber daran kann ich leider nichts ändern.Hab mal dir unnützen bibliotheken rausgenommen.
nun zu meinem fehler.wie übergebe ich denn dann die jeweils 3 koordinaten als array?
-
hadamar schrieb:
ja das mit dem veraltet hab ich schon öfter gehört, aber daran kann ich leider nichts ändern.Hab mal dir unnützen bibliotheken rausgenommen.
nun zu meinem fehler.wie übergebe ich denn dann die jeweils 3 koordinaten als array?
Ich könnte es dir zwar erklären, aber dann würdest du die Aufgabenstellung verfehlen:
– Konstruktor mit Parametern zur Besetzung aller Koordinaten.
Es sollen 1, 2 oder 3 Parameter verarbeitet werden k¨onnen. Bei fehlenden Para-
metern werden die entsprechenden Member auf Null gesetzt.Du solltest daher lieber das abändern, was der Konstruktor erwartet.
Zusatztipp:Mit den fehlenden Parametern ist übrigens gemeint, dass du Defaultparameter benutzen sollst. Macht zwar dann keinen Sinn mehr, einen zweiten Konstruktor ganz ohne Parametern zu haben, aber ich will mich mal nicht über die doofe Aufgabenstellung auslassen. Anscheinend bekommt ihr aber kein gutes C++ beigrebracht.
-
ja.das mit dem informatik-unterricht ist eh so ne sache

evtl hast du ja gemerkt, das ich da nicht allzu versiert bin bei dem thema, deshalb wäre es echt super, wenn du mit etwas genauer (evtl. kleines beispiel oder quelltext editieren) schreiben könntest, was ich da jetzt machen soll.
danke im voraus.
-
Ich habe mich vielleicht etwas kompliziert ausgedrückt, denn das was verlangt ist, kannst du:
- Derzeit will dein Konstruktor einen Parameter, einen float*.
- Laut Aufgabenstellung soll er drei Parameter haben. Alle drei sollen float sein*
- Wenn du das erstmal geändert hast (ganz ganz einfach), können wir uns über Defaultwerte unterhalten
*: Bist du sicher, dass float gemeint ist? In der Aufgabenstellung steht nur "Gleitkommazahl", ich würde das eigentlich als double verstehen.
-
#include <iostream> using namespace std; class Point { private: double coord[2]; public: Point(){} /*Point(void) { coord[0] = 0; coord[1] = 0; coord[2] = 0; } */ Point(double c[]) { coord[0] = c[0]; coord[1] = c[1]; coord[2] = c[2]; } void anzeigen() { cout << coord << endl; } }; int main() { Point Punkte[4] = { Point(0.0,0.0,0.0), Point(1.0,0.0,0.0), Point(1.0,2.0,0.0), Point(1.0,2.0,3.0), }; Punkte[0].anzeigen(); /*Point b(1); b.anzeigen(); Point c(1,2); c.anzeigen(); /*Point d(1,2,3); d.anzeigen();*/ system("pause"); return 0; } so.so sieht das jetzt bei mir aus. ich hab mal aus den floats, doubles gemacht. ich möchte eigentlich nur, dass mir das programm die 4 verschiedenen punktekoordinaten ausgibt
-
Aber auf den Hauptfehler bist du noch nicht eingegangen. Das hier ist kein Hausaufgabenmachforum. Und aus einem Parameter drei zu machen ist derart trivial, dass mach ich dir einfach nicht vor. Das wäre beschämend für uns beide.
-
#include <iostream> using namespace std; class Point { private: double coord[3]; public: Point(void) { coord[0] = 0; coord[1] = 0; coord[2] = 0; } Point(double a, double b, double c) { coord[0] = a; coord[1] = b; coord[2] = c; } void anzeigen() { cout << coord[0] << coord[1] << coord [2] << endl; } }; int main() { Point Punkte[4] = { Point(0.0,0.0,0.0), Point(1.0,0.0,0.0), Point(1.0,2.0,0.0), Point(1.0,2.0,3.0), }; Punkte[3].anzeigen(); /*Point b(1); b.anzeigen(); Point c(1,2); c.anzeigen(); /*Point d(1,2,3); d.anzeigen();*/ system("pause"); return 0; }also so geht es jetzt. ich dachte aber wenn ich 3 gleitkommavariablen haben will, muss ich nur double coord[2] schreiben, weil der doch bei 0 anfängt zu zählen!?
-
hadamar schrieb:
also ich benutze dev-c++ da wir den compiler auch in der uni verwenden. das ich dort iostream.h verwende liegt auch nur daran, dass wir das in der UNI so gelehrt bekommen ;).
Uuuaaahh

Hallo hadamar,
bitte sage doch Deinem Dozenten bzw. Prof., dass er sich hier bei uns melden soll!hadamar schrieb:
die fehlermeldung lautet:
In function
int main()': 49 no matching function for call toPoint::Point(int, int, int)'
candidates are: Point::Point(const Point&)
Point::Point(float*)
Point::Point()und der fehler taucht noch in zeile 50,51 und 52 auf.
auf die Gefahr hin, bei SeppJ als Spielverderber durch zufallen; ich meine für einen Anfänger ist das gar nicht offensichtlich. Du brauchst einen Konstrutor mit drei Koordinaten - also:
Point( double x, double y, double z ) { coord[0] = x; coord[1] = y; coord[2] = z; }Zeile 11 solltest Du ganz schnell ändern nach
double coord[3];.. es sind ja schließlich 3 Koordinaten und nicht zwei.
Weißt Du wie man optionale Koordinaten definiert?
Zeile 36 ist auch falsch. Gibt die drei Koordinaten doch einfach hinter einander aus.
Gruß
Werner
-
.. ja prima - Du hast es doch ganz allein hin gekriegt.
hadamar schrieb:
ich dachte aber wenn ich 3 gleitkommavariablen haben will, muss ich nur double coord[2] schreiben, weil der doch bei 0 anfängt zu zählen!?
double coord[3];bedeutet, dass ein Array von 3 double angelegt wird - die drei Elemente haben die Indizes 0, 1 und 2 und coord[2] bezeichnet das 3. also letzte Element.
Gruß
Werner
-
oh ja stimmt. das mit den indizes. da war ja was. das hatten wir glaube ich auch mal. ich sitz da nur grad schon 8 stunden dran an dem kram und da übersieht oder vergisst man auch die offensichtlichen dinge. so langsam fang ich aber an, etwas durchzusteigen
danke für die hilfe