Konstruktor
-
#include "CRectangle.h" #include "CPoint.h" CRectangle::CRectangle(char fillChar) { m_fillChar = fillChar; /** * Erzeugt ein neues Rechteck mit der angegebenen linken * unteren und rechten oberen Ecken sowie dem angegebenen * F�llzeichen. * * Beim Erzeugen wird die Zusicherung �berpr�ft, dass die * rechte obere Ecke rechts von und oberhalt der linken * unteren Ecke liegen muss! Falls die x-Koordinate * der rechten oberen Ecke nicht gr��er als die x-Koordinate * der linken unteren Ecke ist, wird sie auf den Wert * der x-Koordinate der linken unteren Ecke gesetzt. Falls * die y-Koordinate der rechten oberen Ecke nicht gr��er als * die y-Koordinate der linken unteren Ecke ist, wird sie auf * dem Wert der y-Koordinate der linken unteren Ecke gesetzt. */ } CRectangle::CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar) { m_fillChar = fillChar; if(topRight.getX() < bottomLeft.getX() ){ m_topRight.setX(bottomLeft.getX()); } if(topRight.getY() < bottomLeft.getY()){ m_topRight.setY(bottomLeft.getY()); } } void CRectangle::setCorners(CPoint bottomLeft, CPoint topRight) { // Bitte implementieren } CPoint CRectangle::getBottomLeftCorner() const { // Bitte implementieren und dabei das return-Statement ersetzen. return CPoint(); } CPoint CRectangle::getTopRightCorner() const { // Bitte implementieren und dabei das return-Statement ersetzen. return CPoint(); } void CRectangle::setFillChar(char fillChar) { // Bitte implementieren } char CRectangle::getFillChar() const { // Bitte implementieren und dabei das return-Statement ersetzen. return 0; } bool CRectangle::operator ==(const CRectangle& other) const { // Bitte implementieren und dabei das return-Statement ersetzen. return false; } void CRectangle::draw(CScreen& screen) const { // Bitte implementieren }
Noch diese Fehler zu beseitigen ?
Eclipse meckert auch nur rum.Description Resource Path Location Type
no matching function for call to ‘CPoint::setX()’ CRectangle.cpp
/CRectangle line 34 C/C++ Problem
candidate: void CPoint::setX(int) CPoint.h /CRectangle line 32 C/C++
Problem
candidate expects 1 argument, 0 provided CPoint.h /CRectangle line
32 C/C++ Problem
no matching function for call to ‘CPoint::setY()’ CRectangle.cpp
/CRectangle line 39 C/C++ Problem
make: *** [CRectangle.o] Fehler 1 CRectangle C/C++ Problem
no matching function for call to ‘CPoint::setX()’ CRectangle.cpp
/CRectangle line 36 C/C++ Problem
die Regel für Ziel „CRectangle.o“ scheiterte subdir.mk
/CRectangle/Debug line 27 C/C++ Problem
candidate: void CPoint::setY(int) CPoint.h /CRectangle line 37 C/C++
Problem
candidate expects 1 argument, 0 provided CPoint.h /CRectangle line
37 C/C++ Problem
no matching function for call to ‘CPoint::setY()’ CRectangle.cpp
/CRectangle line 41 C/C++ Problem
-
manni66 schrieb:
Dann suchst du mal die Stelle in deiner IDE, an der man die Ausgabe des Compilers sehen kann und kopierst die komplette Meldung.
-
Building file: ../CRectangle.cpp
Invoking: GCC C++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"CRectangle.d" -MT"CRectangle.d" -o "CRectangle.o" "../CRectangle.cpp"
../CRectangle.cpp: In constructor ‘CRectangle::CRectangle(CPoint, CPoint, char)’:
../CRectangle.cpp:34:20: error: no matching function for call to ‘CPoint::setX()’
if(topRight.setX() < bottomLeft.setX() ){
^
In file included from ../CRectangle.h:13:0,
from ../CRectangle.cpp:8:
../CPoint.h:32:7: note: candidate: void CPoint::setX(int)
void setX(int x);
^~~~
../CPoint.h:32:7: note: candidate expects 1 argument, 0 provided
../CRectangle.cpp:34:40: error: no matching function for call to ‘CPoint::setX()’
if(topRight.setX() < bottomLeft.setX() ){
^
In file included from ../CRectangle.h:13:0,
from ../CRectangle.cpp:8:
../CPoint.h:32:7: note: candidate: void CPoint::setX(int)
void setX(int x);
^~~~
../CPoint.h:32:7: note: candidate expects 1 argument, 0 provided
../CRectangle.cpp:36:22: error: no matching function for call to ‘CPoint::setX()’
m_topRight.setX() = bottomLeft.setX();
^
In file included from ../CRectangle.h:13:0,
from ../CRectangle.cpp:8:
../CPoint.h:32:7: note: candidate: void CPoint::setX(int)
void setX(int x);
^~~~
../CPoint.h:32:7: note: candidate expects 1 argument, 0 provided
../CRectangle.cpp:36:42: error: no matching function for call to ‘CPoint::setX()’
m_topRight.setX() = bottomLeft.setX();
^
In file included from ../CRectangle.h:13:0,
from ../CRectangle.cpp:8:
../CPoint.h:32:7: note: candidate: void CPoint::setX(int)
void setX(int x);
^~~~
../CPoint.h:32:7: note: candidate expects 1 argument, 0 provided
../CRectangle.cpp:39:21: error: no matching function for call to ‘CPoint::setY()’
if(topRight.setY() < bottomLeft.setY()){
^
In file included from ../CRectangle.h:13:0,
from ../CRectangle.cpp:8:
../CPoint.h:37:7: note: candidate: void CPoint::setY(int)
void setY(int y);
^~~~
../CPoint.h:37:7: note: candidate expects 1 argument, 0 provided
../CRectangle.cpp:39:41: error: no matching function for call to ‘CPoint::setY()’
if(topRight.setY() < bottomLeft.setY()){
^
In file included from ../CRectangle.h:13:0,
from ../CRectangle.cpp:8:
../CPoint.h:37:7: note: candidate: void CPoint::setY(int)
void setY(int y);
^~~~
../CPoint.h:37:7: note: candidate expects 1 argument, 0 provided
../CRectangle.cpp:41:22: error: no matching function for call to ‘CPoint::setY()’
m_topRight.setY() = bottomLeft.setY();
^
In file included from ../CRectangle.h:13:0,
from ../CRectangle.cpp:8:
../CPoint.h:37:7: note: candidate: void CPoint::setY(int)
void setY(int y);
^~~~
../CPoint.h:37:7: note: candidate expects 1 argument, 0 provided
../CRectangle.cpp:41:42: error: no matching function for call to ‘CPoint::setY()’
m_topRight.setY() = bottomLeft.setY();
^
In file included from ../CRectangle.h:13:0,
from ../CRectangle.cpp:8:
../CPoint.h:37:7: note: candidate: void CPoint::setY(int)
void setY(int y);
^~~~
../CPoint.h:37:7: note: candidate expects 1 argument, 0 provided
make: *** [CRectangle.o] Fehler 1
subdir.mk:27: die Regel für Ziel „CRectangle.o“ scheiterte00:29:08 Build Finished (took 302ms)
-
Das ist die Stelle, die du angeblich geändert hast...
-
Jetzt klappt es ohne Fehlermeldung .
Kann ich die Zuweisung so vor der If Bedingung machen ?
m_fillChar = fillChar;
m_bottomLeft = bottomLeft;
m_topRight = topRight;* CRectangle.cpp * * Created on: 05.02.2015 * Author: lipp */ #include "CRectangle.h" #include "CPoint.h" CRectangle::CRectangle(char fillChar) { m_fillChar = fillChar; /** * Erzeugt ein neues Rechteck mit der angegebenen linken * unteren und rechten oberen Ecken sowie dem angegebenen * F�llzeichen. * * Beim Erzeugen wird die Zusicherung �berpr�ft, dass die * rechte obere Ecke rechts von und oberhalt der linken * unteren Ecke liegen muss! Falls die x-Koordinate * der rechten oberen Ecke nicht gr��er als die x-Koordinate * der linken unteren Ecke ist, wird sie auf den Wert * der x-Koordinate der linken unteren Ecke gesetzt. Falls * die y-Koordinate der rechten oberen Ecke nicht gr��er als * die y-Koordinate der linken unteren Ecke ist, wird sie auf * dem Wert der y-Koordinate der linken unteren Ecke gesetzt. */ } CRectangle::CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar) { m_fillChar = fillChar; m_bottomLeft = bottomLeft; m_topRight = topRight; if(topRight.getX() < bottomLeft.getX() ){ m_topRight.CPoint::setX(bottomLeft.getX()); } if(topRight.getY() < bottomLeft.getY()){ m_topRight.setY(bottomLeft.getY()); } } void CRectangle::setCorners(CPoint bottomLeft, CPoint topRight) { // Bitte implementieren } CPoint CRectangle::getBottomLeftCorner() const { // Bitte implementieren und dabei das return-Statement ersetzen. return CPoint(); } CPoint CRectangle::getTopRightCorner() const { // Bitte implementieren und dabei das return-Statement ersetzen. return CPoint(); } void CRectangle::setFillChar(char fillChar) { // Bitte implementieren } char CRectangle::getFillChar() const { // Bitte implementieren und dabei das return-Statement ersetzen. return 0; } bool CRectangle::operator ==(const CRectangle& other) const { // Bitte implementieren und dabei das return-Statement ersetzen. return false; } void CRectangle::draw(CScreen& screen) const { // Bitte implementieren }
-
Gast12 schrieb:
Jetzt klappt es ohne Fehlermeldung .
Kann ich die Zuweisung so vor der If Bedingung machen ?
m_fillChar = fillChar;
m_bottomLeft = bottomLeft;
m_topRight = topRight;Technisch gesehen kannst du das machen. Ob es das ist, was du machen willst, kann ich nicht beurteilen. Am besten probierst du aus, ob das raus kommt, was du erwartest.
-
Sagen wir mal so .
Ich übe ja an dieser Aufgabe.
Ist es das was der Aufgabensteller erwartet ?
-
Gast12 schrieb:
Sagen wir mal so .
Ich übe ja an dieser Aufgabe.
Ist es das was der Aufgabensteller erwartet ?Ich denke mal der erwartet (oder eventuell auch nicht), dass durch das Lösen der Aufgabe Verständnis für das Programmieren und die Sprache entwickelst.
Das wird aber nicht passieren, wenn du einfach nur rätst und da irgendwas reinschreibst.
Du musst schon die Logik dahinter verstehen und dir auch etwas dabei denken.Im Endeffekt drückt man beim Programmieren einen logischen Gedankengang in einer formalen Sprache aus - wenn man die Logik einfach weglässt und per trial und error + Forenposts irgendwann zum Ergebnis kommt, dann hat man aber nichts gelernt.
-
Gast12 schrieb:
Sagen wir mal so .
Ich übe ja an dieser Aufgabe.
Ist es das was der Aufgabensteller erwartet ?Kling halbwegs so. Wäre etwas einfacher zu beurteilen, wenn du kaputte Sonderzeichen in der kopierten Aufgabenbeschreibung korrigiert hättest.
Als kleiner mathematischer Tipp
\neg(x < y) \not\equiv x>y
-
Ist die Zusicherung von meiner Setter Methode richtig ?
-
Dann nochmal ausgeschrieben. In dem Text steht "nicht größer" du testes anders herum auf kleiner. Wenn man es ganz genau nimmt, müsste dann der Vergleich auf kleiner gleich lauten.
Da bei Erfüllung der Bedingung aber der eine Wert der entsprechenden Variablen zugewiesen wird, macht das in diesem Fall keinen Unterschied im Ergebnis.
-
Implementieren Sie den operator<<. Die Ausgabe soll das Format
CRectangle[(<blX>, <blY>), (<trX>, <trY>), '<fillChar>']
(ohne abschließendem Zeilenumbruch) haben. Dabei steht „<blX>“ für „bottom left X(-
Koordinate)“ („<trY>“ entsprechend für „top right Y(-Koordinate)“). Für ein Rechteck mit
linker unterer Ecke bei (1,2) und oberer rechter Ecke bei (3,4) und Füllzeichen '#' ergäbe
sich also:
CRectangle[(1,2), (3,4), '#']Vor allem beim letzten Teil mit fillchar bin ich mir nicht sicher ?
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++ ProblemIst meine Idee total falsch oder nicht so blöd wie ich denke ?
-
Die Fehlermeldung passt nicht zu deinem Code. Gleich die erste macht das deutlich:
‘const class CRectangle’ has no member named ‘fillChar’; did you mean ‘m_fillChar’? CRectangle.cpp /CRectangle line 94 C/C++ Problem
In deinem Code benutzt du aber fillChar gar nicht, sondern rufst
getFillChar
auf. Das passt also nicht zusammen.Außerdem steht in der Aufgabe explizit "ohne abschließendem Zeilenumbruch" drin. Du schreibst aber endl in den Stream.
Ach ja,
cout << "H" << "a" << "l" << "l" << "o";
kannst du einfacher schreiben:cout << "Hallo";
, das gilt auch für<< ")" << "," << "("
... dann fiele dir vielleicht auch auf, dass im Beispiel nicht "),(" steht, sondern "), (". Und das schließende "]" fehlt dir auch sowie die ' um das FillChar.Die Frage ist also eher, wobei bist du dir nicht sicher - und warum nicht?
-
Erzeugen Sie in main.cpp ein Rechteck rectangle1 mit der linken unteren Ecke (5,5)
und der rechten oberen Ecke (25,15) und dem Füllzeichen '#'. Geben Sie das Rechteck
unter Verwendung von operator<< auf der Konsole aus.Meine main sieht so aus :
/ GIT-Labor // main.h //////////////////////////////////////////////////////////////////////////////// // Header-Dateien #include <iostream> // Header f�r die Standard-IO-Objekte (z.B. cout, cin) #include <stdlib.h> // TODO: F�gen Sie hier weitere ben�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; }
Ich verstehe allerdings in diesem Fall die Aufgabenstellung nicht .
Ich übe eigentlich nur an der Aufgabe ,aber trotzdem .
Was soll ich den genau mit operator << ausgeben ?
Ich verstehe das ehrlich gesagt gar nicht .
Was wollen die von mir ?
-
Passt das ?
-
int main (void) { // TODO: Tragen Sie hier Ihren Namen, die Matrikelnummer und die Rechnernummer ein cout << "Name:, Matrikelnummer: <Matrikelnummer>" << endl << endl; CRectangle rectangle1; cout << "CRectangle1[(" << rectangle1.getBottomLeftCorner().getX(5) << "," << " " << rectangle1.getBottomLeftCorner().getY(5) << ")" << "," << "(" << rectangle1.getTopRightCorner().getX(25) << " , "<< rectangle1.getTopRightCorner().getY(15)<< " )"<< ","<< "fillChar"; return 0; }
-
mittlerweile nervst du echt!
-
Wieso tust du dir selbst nicht einfach einen gefallen und nimmst erstmal ein Buch zu Hand?
-
Gast12 schrieb:
Passt das ?
Schätze mal, nein.
Vermutlich soll deine main ungefähr so aussehen:
int main() { CPoint bottomLeft(5,5); CPoint topRight(25,15); CRectangle rect(bottomLeft, topRight); cout << rect; }
Edit: Ach ja, und das Ergebnis sollte dann ein, aus '#" gezeichnetes, Rechteck mit den angegebenen Koordinaten auf dem Bildschirm sein.
Ansonsten nimm dir den Rat von Cardiac zu Herzen, was du bisher fabrizierst sieht sehr planlos aus.
-
Bahn frei für obfuscated Lösungen.