Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Programmierung 2 » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Seiten (13): « vorherige 1 [2] 3 4 nächste » ... letzte » Neues Thema erstellen Thema ist geschlossen
Zum Ende der Seite springen Programmierung 2
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 639
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Mach doch mal das "CPoint::" in Zeile 40 raus!

Ansonsten musst Du natürlich die Zusicherung dann in setCorners() genau so implementieren, wie im Konstruktor, also mit zwei getrennten ifs und so weiter. Überlege Dir, ob Du irgendwie den nötigen Code nicht in eine gemeinsame Funktion oder so auslagern kannst, damit Du den Code nicht nahezu komplett doppeln musst.

Gruß
Marco

PS: Ich werde mal irgendwann den Quelltext bei mir ausprobieren müssen. Komme nur gerade nicht so dazu.
05.09.2017 11:35 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Victor
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Soll ich meine 2 Besingungen einfach aufteilen in 2 Bedingungen oder wie ?
05.09.2017 12:04
Victor
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ich versuche jetzt gerade den operator zu implementieren ?

Dafür muss ich doch zuerst den Konstruktor Aufbau ändern oder ?


weil er hat normalerweise ja nur bottomLeft , topRight , fillChar

.

Ich will ja auch auf die x und y Koordinate zu greifen ?

Irgendwie so?
ostream& operator<< (ostream& lhs, const CRectangle& rhs){
rhs.CRectangle(bottomLeft(getX(),getY()),topRight(getX(),getY()), fillChar);


}
06.09.2017 00:31
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 639
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

In bottomLeft und topRight sind doch die Koordinaten drin, was willst Du da an den Konstruktor ändern?

Nein, Deine Operator-Definition ist kompletter Mist!

Gruß
Marco
06.09.2017 08:17 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Victor
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hast du irgendwie paar Tipps ?

Oder soll ich einfach ausgeben mittels lhs?
06.09.2017 09:10
Victor
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Meine Idee wäre das es irgendwie so aussehen sollte?

Ich weiss das hier paar fehler drin sind ,aber was soll ich machen .

Bin kein Experte beim proggen.


code:
1:
2:
3:
4:
5:
6:
7:
8:
ostream& operator<< (ostream& lhs, const CRectangle& rhs){
	lhs << (rhs.bottomLeft(CPoint.getX(),CPoint.getY())<< (rhs.topRight(CPoint.getX(),CPoint.getY())<< rhs.fillChar << endl;

return lhs;
}



Oder wieder mal Mist ? großes Grinsen
06.09.2017 16:17
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 639
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Also erstmal kannst Du ja nur public deklarierte Sachen des CRectangle-Interfaces verwenden.
Das wären z. B. die Getter-Methoden.
Dann: Erklär mir mal bitte, was Du mit so was hier:
code:
1:
(rhs.bottomLeft(CPoint.getX(),CPoint.getY())
überhaupt ausdrücken willst.
CPoint ist eine Klasse. Die hat zwar die Methode getX() und getY(), aber die müssen sich ja auf einen konkreten Punkt beziehen, also auf ein Objekt und nicht dessen Klasse.
rhs.bottomLeft() gibt es nicht, weder als Methode noch als Member-Variable, wobei die Klammern hinten dran nur bei einer Funktion/Methode richtig sind, nicht einer Variablen o. ä.
Also willst Du wahrscheinlich auf die Koordinaten des Punktes links-unten zugreifen. Dazu musst Du aber ersteinmal den Getter des rhs Objekts verwenden, um auf das Objekt der Klasse CPoint zu kommen, also:
code:
1:
rhs.getBottomLeftCorner()

gibt Dir diesen Punkt (also eben das konkrete Objekt der Klasse CPoint) zurück.
Davon willst Du aber die Koordinaten ausgeben. Ich persönlich würde für die Klasse CPoint auch den Operator operator<< überladen und zwar so, dass (xx,yy), mit xx und yy die jeweiligen Zahlenwerte der Koordinaten, ausgegeben wird. Du hast aber von der CPoint-Klasse auch Getter und Setter der Koordinaten. Du könntest also auch hier einfach schreiben:
code:
1:
lhs << "CRectangle[(" << rhs.getBottomLeftCorner().getX() << "," << ....

Ist aber nicht so gut, weil es die Kapselung eigentlich aufbricht und so.
Aber da kommt der nächste Punkt: Wenn Du eine Klammer als Zeichen ausgeben willst, dann kannst Du doch nicht einfach cout << ( << ... schreiben! Da muss doch die Klammer in Anführungszeichen, weil das ein literaler String ist und nicht als Operator im Programmtext interpretiert werden soll und so weiter. Genau so wie das Komma auch usw.

Ich meine, wo soll man da anfangen? Du versuchst das irgendwie mit Trial-and-Error, aber so funktioniert das nicht. Lies Dir doch zuerst ein paar Dinge über die ganz fundamentale Syntax von C++ durch, bevor Du hier irgendwie rumprobierst...

Gruß
Marco
06.09.2017 16:55 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Victor
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Vor allem beim letzten Teil mit fillchar bin ich mir nicht sicher ?


code:
1:
2:
3:
4:
5:
6:
7:
8:
ostream& operator<< (ostream& lhs, const CRectangle& rhs){
	lhs << "CRectangle[(" << rhs.getBottomLeftCorner().getX() << "," << " " << rhs.getBottomLeftCorner().getY() << ")" << "," << "(" << rhs.getTopRightCorner().getX() << " , "<< rhs.getTopRightCorner().getY()<< " )"<< ","<< rhs.getFillChar()<< endl;

return lhs;
}



Fehler:

Description Resource Path Location Type
‘const class CRectangle’ has no member named ‘fillChar’; did you mean ‘m_fillChar’? CRectangle.cpp /CRectangle line 94 C/C++ Problem
‘const class CRectangle’ has no member named ‘topRight’; did you mean ‘m_topRight’? CRectangle.cpp /CRectangle line 94 C/C++ Problem
expected ‘)’ before ‘;’ token CRectangle.cpp /CRectangle line 94 C/C++ Problem
die Regel für Ziel „CRectangle.o“ scheiterte subdir.mk /CRectangle/Debug line 27 C/C++ Problem
make: *** [CRectangle.o] Fehler 1 CRectangle C/C++ Problem
expected primary-expression before ‘.’ token CRectangle.cpp /CRectangle line 94 C/C++ Problem
‘const class CRectangle’ has no member named ‘bottomLeft’; did you mean ‘m_bottomLeft’? CRectangle.cpp /CRectangle line 94 C/C++ Problem
06.09.2017 19:00
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 639
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ich meine, dass die Zeile so syntaktisch OK sein sollte. Die Fehlermeldungen haben zumindest nichts damit zu tun. Entweder sind die gar nicht mehr aktuell oder sie beziehen sich auf eine ganz andere Stelle im Programm. Was steht denn in Zeile 94 in CRectangle.cpp? Offenbar meckert er ja hauptsächlich über diese Zeile. Allerdings meckert er nicht vorhandene Variablen an, die in der Zeile, die Du geschickt hast, gar nicht drin stehen.

Gruß
Marco
07.09.2017 07:52 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Victor
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Gut bin jetzt ein wenig weiter gegangen mit meiner Aufgabe .

Bin jetzt gerade beim testen .


code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
////////////////////////////////////////////////////////////////////////////////
// Header-Dateien
#include <iostream>		// Header f&#65533;r die Standard-IO-Objekte (z.B. cout, cin)
#include <stdlib.h>
// TODO: F&#65533;gen Sie hier weitere ben&#65533;tigte Header-Dateien der
// Standard-Bibliothek ein z.B.
// #include <string>

using namespace std;	// Erspart den scope vor Objekte der
						// C++-Standard-Bibliothek zu schreiben
						// z.B. statt "std::cout" kann man "cout" schreiben

// Inkludieren Sie hier die Header-Files Ihrer Klassen, z.B.
// #include "CFraction.h"
#include "CPoint.h"
#include "CRectangle.h"
#include "CScreen.h"


// Hauptprogramm
// Dient als Testrahmen, von hier aus werden die Klassen aufgerufen
int main (void)
{
    // TODO: Tragen Sie hier Ihren Namen, die Matrikelnummer und die Rechnernummer ein
	cout << "Name:, Matrikelnummer: <Matrikelnummer>" << endl << endl;
	
	CRectangle rectangle1.getBottomLeftCorner().getX(5).getY(5);
	CRectangle rectangle1.getTopRightCorner().getX(25).getY(15);
	CRectangle rectangle.getFillChar(fillChar);

	return 0;
}




Wie soll ich das mit operator << ausgeben ?

Das Rechteck irgendwie mit this ausgeben ?
07.09.2017 13:21
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 639
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Noch ein paar Dinge, die ich zum vorhergehenden schreiben wollte:
Du schreibst z. B.:
code:
1:
... << ")" << "," << "(" << ...

Das macht man normalerweise nicht, wenn es auch nicht wirklich falsch ist. Du kannst das ja auch alles zusammen fassen und dann kürzer das hier schreiben:
code:
1:
... << "),(" << ..

Genau so an den anderen Stellen, an denen Du mehrere sog. String-Literale (also die explizit in Anführungszeichen angegebenen Strings) direkt hintereinander ausgibst. Das kann man auch immer dann zusammen in ein einzelnes String-Literal packen.
Dann stimmt der String noch nicht: Die Ausgabe soll so sein, dass das Füllzeichen in einfachen Hochkommata steht und am Ende noch eine eckige-Klammer-zu ausgegeben wird.

Dann hast Du mal wieder ein " << endl" am Ende angehängt, aber auch hier steht in der Aufgabe, dass eben kein Zeilenumbruch am Ende ausgegeben werden soll! Das endl macht immer einfach nur den Zeilenumbruch. Also kein endl ausgeben!

Gruß
Marco
07.09.2017 14:53 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Victor
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

code:
1:
2:
3:
4:
5:
6:
7:
8:
ostream& operator<< (ostream& lhs, const CRectangle& rhs){
	lhs << "CRectangle[(" << rhs.getBottomLeftCorner().getX() << "," << " " << rhs.getBottomLeftCorner().getY() << ")" << "," << "(" << rhs.getTopRightCorner().getX() << " , "<< rhs.getTopRightCorner().getY()<< " )"<< ","<< rhs.getFillChar()<< 

return lhs;
}



Was soll ich statt dem endl schreiben dann ?

Ist meine obere main ok?

Wie gebe ich das Rechteck aus beim operator?
07.09.2017 15:00
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 639
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

statt dem endl schreibst Du nix! auch kein "<<". Warum willst Du da was schreiben? Du willst doch gerade kein Zeilenende ausgeben!

Deine main hab ich mir noch nicht angeschaut und ich verstehe die Aufgabe auch ehrlich gesagt nicht so ganz: Welche operator<< soll das denn sein, wenn der für die CRectangle-Ausgabe doch schon überladen ist? Ich weiß nicht, wie diese Aufgabe zu verstehen ist.
Allerdings wirst Du zur Ausgabe wohl einige Leerzeilen (also Zeilenumbrüche) ausgeben müssen für den Bereich über dem Rechteck, dann immer eine bestimmte Anzahl Leerzeichen bis zum link Rand des Rechtecks, das Füllzeichen bis zum rechten Rand, dann einen Zeilenumbruch. Das so lange, bis Du genügend Zeilen bis zum unteren Rechteckrand ausgegeben hast.

Ich denke zumindest, dass die Aufgabe so irgendwie gedacht ist.

Gruß
Marco
07.09.2017 16:32 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Victor
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Wenn ich das ohne endl stehen lasse , bekomme ich fehler?

code:
1:
2:
3:
4:
5:
6:
7:
8:
    

ostream& operator<< (ostream& lhs, const CRectangle& rhs){
	lhs << "CRectangle[(" << rhs.getBottomLeftCorner().getX() << "," << " " << rhs.getBottomLeftCorner().getY() << ")" << "," << "(" << rhs.getTopRightCorner().getX() << " , "<< rhs.getTopRightCorner().getY()<< " )"<< ","<< " fillChar"

return lhs;
}


Description Resource Path Location Type
expected primary-expression before ‘return’ CRectangle.cpp /CRectangle line 96 C/C++ Problem
die Regel für Ziel „CRectangle.o“ scheiterte subdir.mk /CRectangle/Debug line 27 C/C++ Problem
no return statement in function returning non-void [-Wreturn-type] CRectangle.cpp /CRectangle line 97 C/C++ Problem
make: *** [CRectangle.o] Fehler 1 CRectangle C/C++ Problem


Was soll ich den genau mit operator << ausgeben ?
Ich verstehe das ehrlich gesagt gar nicht .
Was wollen die von mir ?
07.09.2017 17:33
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 639
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Du hast jetzt ja auch kein Semikolon mehr am Zeilenende!
07.09.2017 21:53 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Seiten (13): « vorherige 1 [2] 3 4 nächste » ... letzte » Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Thema ist geschlossen
Informatiker Board » Themengebiete » Praktische Informatik » Programmierung 2