C++ Error



  • @Programmer33 Ausgefüllte Rechtecke. Dacht' ich mir. Macht die Sache einfach. Für mich... Für dich als angehender Mathematiker kannst Du dir schon mal überlegen wie man Rechtecke mit Winkel zur Horizontalen (oder wie man das formuliert) zeichnet 😉



  • @Jockelx sagte in C++ Error:

    @dirkski sagte in C++ Error:

    Obwohl: ist an der stelle das endl vielleicht nützlich wg. verschachtelter Aufrufe? Frage an das Forum.

    ???
    Nö! Wo siehst du denn da überhaupt einen Zusammenhang?

    Ich war mir einfach nicht sicher und wollte keinen Mist verzapfen...



  • @Programmer33 sagte in C++ Error:

    Wollen die ein Rechteck gezeichnet haben oder was genau?

    Das steht doch wohl ganz klar in dem Kommentar den du vorhin gepostet hast!?



  • @Swordfish Moin 🙂



  • ja swordfish für mich ist das alles nicht so einfach 😀



  • @Jockelx sagte in C++ Error:

    @dirkski sagte in C++ Error:

    Obwohl: ist an der stelle das endl vielleicht nützlich wg. verschachtelter Aufrufe? Frage an das Forum.

    ???
    Nö! Wo siehst du denn da überhaupt einen Zusammenhang?

    Ja, natürlich ist das blödsinn. Dachte an verschachtelte Aufrufe und das ein flush() dabei ganz gut ist. Blödsinn weil da nix verschachtelt wird.. Sorry



  • eine untere Linie ist ja21 Zeichen lang .
    Man muss ja zuerst 21 mal gerade gehen und dann wieder hoch wieder links 21 mal ?

    Wie macht man das als Code ?



  • @Programmer33 Der vollständigkeitshalber: man nimmt bei der Ausgabe '\n' statt std::endl weil endl zum Newline auch noch einen flush() macht. Das ist zeitaufwändig und unsinnig.

    Edit: In diesem Fall unsinnig



  • Ich sehe gerade die Aufgabe ist doch etwas anders als ich mir erst gedacht habe. Aber ich bin draußen für heute.



  • @dirkski Moin



  • @Swordfish Zu spät 🙂 Ich hab irgendwie Kopfschmerzen und leg mich was hin... Bis denne



  • @Programmer33 sagte in C++ Error:

    eine untere Linie ist ja21 Zeichen lang .
    Man muss ja zuerst 21 mal gerade gehen und dann wieder hoch wieder links 21 mal ?

    Wie macht man das als Code ?

    Erstmal garnicht....

    • operator<<()
      Sorry, hier sollst du kein Newline einfügen, steht doch extra in der Aufgabe. operator<<() überladen und kein Newline am Ende!
      Desweiteren gibt er falsche Zahlen aus, es fehlen Leerzeichen und Hochkommas...
    • Der 2. Konstruktor ist so falsch, komplett
    • setCorners() ist auch kaputt...

    ...und solange brauchst du nicht mit der draw()-Methode anfangen. Die ist dann einfach und hat nur drei Zeilen plus geschweifter Klammern wenn mann will...

    Versuche Punkt für Punkt oben abzuarbeiten bis du das selbe Ergebnis hast. Evtl. mit Punkt 2 anfangen. Aber Punkt 1 brauchst du zum überprüfen. Die zweite Zahl (die erste Y-Koordinate) gibst Du falsch aus:

    lhs << "CRectangle[(" << rhs.getBottomLeftCorner().getX() << "," <<rhs.getTopRightCorner().getY() // Muss  getBottomLeftCorner().getY() sein
    

    In der Aufgabe steht du sollst ein paar CRectangles erzeugen zum überprüfen...
    Und den operator==() testen...

    Hier wie es aussehen soll (oder könnte falls ich Fehler drin habe. Aber du Kannst ja die Ausgabe mit deiner Klausur vergleichen. Also was da gefordert wurde):

    Ich habe noch ein paar Komentare angefügt...

    Die zugehörige main.cpp ist unten

    	Test Default-Konstruktor:
    rec		= CRectangle[(0,0), (0,0), '#']
    	Test 2. Konstruktor:
    r2{ {5,5}, {5,5} }	= CRectangle[(5,5), (5,5), '#']    // passt (genauer: ist nicht größer. Also Wert aus bottomLeft)
    r3{ {5,5}, {10,10} }	= CRectangle[(5,5), (10,10), '#']  // passt
    r4{ {5,5}, {4,10} }	= CRectangle[(5,5), (5,10), '#']   // 4 < 5 also nehme bottomLeft.getX() = 5
    r5{ {5,5}, {10,4} }	= CRectangle[(5,5), (10,5), '#']   // dito nur y
    	Test .setCorner():
    r5.setCorners( {2,3}, {2,3} )    = CRectangle[(5,5), (10,5), '#'] // zweite 2,3 ist nicht größer, also laut Aufgabe nichts ändern!
    r5.setCorners( {2,3}, {4,2} )    = CRectangle[(5,5), (10,5), '#'] // 2 < 3, nicht ändern
    r5.setCorners( {2,3}, {2,4} )    = CRectangle[(5,5), (10,5), '#'] // 2 < 2, nope, nicht ändern
    r5.setCorners( {2,3}, {42,23} )  = CRectangle[(2,3), (42,23), '#'] // jep, x2 u. y2 größer. Also ändern...
    	Test operator==():
    r2=CRectangle[(5,5), (5,5), '#']  ==  r3=CRectangle[(5,5), (10,10), '#']	== false
    r3 = r2;
    r2=CRectangle[(5,5), (5,5), '#']  ==  r3=CRectangle[(5,5), (5,5), '#']	== true
    r2.setFillChar('X');
    r2=CRectangle[(5,5), (5,5), '#']  ==  r3=CRectangle[(5,5), (5,5), 'X']	== false // weil unterschiedliche Füllzeichen
    
    

    Hier ist was dein Programm ausgibt (was anderes):

    	Test Default-Konstruktor:
    rec		= CRectangle[(0,0),(0,0),#]
    
    	Test 2. Konstruktor:
    r2{ {5,5}, {5,5} }	= CRectangle[(0,0),(0,0),#] // scheint nichts gesetzt. Aber die 2. Zahl ist ja eh immer gleich der 4.
    
    r3{ {5,5}, {10,10} }	= CRectangle[(0,0),(0,0),#]
    
    r4{ {5,5}, {4,10} }	= CRectangle[(0,0),(0,0),#]
    
    r5{ {5,5}, {10,4} }	= CRectangle[(0,0),(0,0),#]
    
    	Test .setCorner():
    r5.setCorners( {2,3}, {2,3} )    = CRectangle[(0,0),(0,0),#]
    
    r5.setCorners( {2,3}, {4,2} )    = CRectangle[(2,2),(4,2),#]
    
    r5.setCorners( {2,3}, {2,4} )    = CRectangle[(2,4),(2,4),#]
    
    r5.setCorners( {2,3}, {42,23} )  = CRectangle[(2,23),(42,23),#]
    
    	Test operator==():
    r2=CRectangle[(0,0),(0,0),#]
      ==  r3=CRectangle[(0,0),(0,0),#]
    	== true
    r3 = r2;
    r2=CRectangle[(0,0),(0,0),#]
      ==  r3=CRectangle[(0,0),(0,0),#]
    	== true
    r2.setFillChar('X');
    r2=CRectangle[(0,0),(0,0),#]
      ==  r3=CRectangle[(0,0),(0,0),X]
    	== false
    
    

    Mit dieser main.cpp habe ich getestet:

    // main.cpp
    
    #include <iostream>
    #include <ios>
    
    #include "CScreen.h"
    #include "CRectangle.h"
    #include "CPoint.h"
    
    
    int main() {
      CRectangle rec;
      std::cout << "\tTest Default-Konstruktor:\nrec\t\t= " << rec
                << "\n\tTest 2. Konstruktor:\n";
    
      CRectangle r2{ {5,5}, {5,5} };
      std::cout << "r2{ {5,5}, {5,5} }\t= " << r2 << "\n";
    
      CRectangle r3{ {5,5}, {10,10} };
      std::cout << "r3{ {5,5}, {10,10} }\t= " << r3 << "\n";
    
      CRectangle r4{ {5,5}, {4,10} };
      std::cout << "r4{ {5,5}, {4,10} }\t= " << r4 << "\n";
    
      CRectangle r5{ {5,5}, {10,4} };
      std::cout << "r5{ {5,5}, {10,4} }\t= " << r5
                << "\n\tTest .setCorner():\n";
    
      r5.setCorners( {2,3}, {2,3} );
      std::cout << "r5.setCorners( {2,3}, {2,3} )    = " << r5 << "\n";
    
      r5.setCorners( {2,3}, {4,2} );
      std::cout << "r5.setCorners( {2,3}, {4,2} )    = " << r5 << "\n";
    
      r5.setCorners( {2,3}, {2, 4} );
      std::cout << "r5.setCorners( {2,3}, {2,4} )    = " << r5 << "\n";
    
      r5.setCorners( {2,3}, {42, 23} );
      std::cout << "r5.setCorners( {2,3}, {42,23} )  = " << r5
                << "\n\tTest operator==():\n" << std::boolalpha;
    
      std::cout << "r2=" << r2 << "  ==  r3=" << r3
                << "\t== " << (r2==r3)
                <<  "\nr3 = r2;\n";
    
      r3 = r2;
    
      std::cout << "r2=" << r2 << "  ==  r3=" << r3
                << "\t== " << (r2==r3)
                <<  "\nr2.setFillChar('X');\n";
    
      r3.setFillChar('X');
    
      std::cout << "r2=" << r2 << "  ==  r3=" << r3
                << "\t== " << (r2==r3) <<  "\n";
    
      CScreen scr;
    
    //  r5.setCorners({5,5}, {25,15});
    //  r5.draw(scr);
    
    //  scr.print();
    }
    
    

    hth. Fragen bitte auf eingekreiste Probleme.


Anmelden zum Antworten