Ich kann kein Objekt einer Klasse in einer anderen Klasse verwenden
-
Hallo,
Ich habe ein Problem mit meinem aktuellen Programm, welches für euch sicherlich sehr primitiv ist. Es soll aus 2 Klassen bestehen. Einer Punkt Klasse (x und y Koordinate) und einer Rechtecks Klasse (4 Objekte der Klasse Punkt).
Das Rechteck soll über einen Konstruktor (Punkt A und B werden mitgeliefert), A, B, C und D initialisieren. Ich muss also im Private Bereich der Klasse Rechteck 4 Objekte der Klasse Punkt definieren. Egal wie ich es schreibe, eine Fehlermeldung spuckt der Compiler immer aus
.#include <iostream> #include <conio.h> #include <math.h> using namespace std; class Punkt { int x,y; public: Punkt( int xx, int yy ) { x = xx; y = yy; } void ausgabe( void ) { cout << "(" << x << "," << y << ")" << endl; } int getxy( char c ) { if ( c == 'x' ) return x; if ( c == 'y' ) return y; } void setxy( char c, int i ) { if ( c == 'x' ) x = i; if ( c == 'y' ) y = i; } }; class Rechteck { Punkt A(0,0),B(0,0),C(0,0),D(0,0); public: Rechteck( Punkt AA, Punkt CC ) { A.setxy( 'x', AA.getxy( 'x' ) ); A.setxy( 'y', AA.getxy( 'y' ) ); C.setxy( 'x', CC.getxy( 'x' ) ); C.setxy( 'y', CC.getxy( 'y' ) ); B.setxy( 'x', AA.getxy( 'y' ) ); B.setxy( 'y', CC.getxy( 'x' ) ); D.setxy( 'x', CC.getxy( 'y' ) ); D.setxy( 'y', AA.getxy( 'x' ) ); } }; void main(void) { Punkt P1( 8,10 ); Punkt P2( 2,5 ); Rechteck R1( P1, P2 ); P1.ausgabe(); getch(); }Der Konstruktor von Punkt funktioniert im main. In der Klasse Rechteck aber nicht. Es kommen folgende Fehlermeldung mehrmals:
Fehler 4 error C2059: Syntaxfehler: 'Konstante'
Fehler 5 error C2228: Links von ".setxy" muss sich eine Klasse/Struktur/Union befinden.
Ich habe jetzt schon so lange damit herumgehadert, bin aber zu keinem Ergebniss gekommen. Könnt ihr mir bitte verraten, wo der Fehler liegt? Ich bin momentan echt ratlos. Erwähnenswert ist noch, dass ich absoluter Beginner in Sachen C++ bin.
Vielen Dank schonmal im Vorraus
mfg
randy
-
Hallo randy,
Der Fehler, den du gemacht hast, ist folgender:
Du Darfst die Werte A,B,C,D nicht in Zeile 46 Initialisieren.
Das geht erst im Konstruktor. Hier könntest du eine Initialisierungsliste verwenden:class Rechteck { Punkt A,B,C,D; public: Rechteck(Punkt AA, Punkt CC):A(0,0),B(0,0),C(0,0),D(0,0) { A.setxy( 'x', AA.getxy( 'x' ) ); A.setxy( 'y', AA.getxy( 'y' ) ); // ... } }Du kannst die Initialisierungsliste auch weglassen, dann musst du aber in der Klasse Punkt noch einen Standardkonstruktor definieren.
MfG, Jochen
-
Zeile 46:
Punkt A(0,0),B(0,0),C(0,0),D(0,0);ist falsch. Die Werte initialisiert man im Konstruktor:
class Rechteck { Punkt A,B,C,D; public: Rechteck( Punkt AA, Punkt CC ) : A(0,0),B(0,0),C(0,0),D(0,0) { // ... } // ... } // ...
-
Vielen Dank, jetzt funktioniert es. Ein super Forum ist das hier. Ich habe mich angemeldet und schreibe nun als randy2.
mfg
randy2