C++ Error



  • Hey Leute ich komme seit gestern nicht darauf warum meine IDE bei CPoint nicht erkennt ?
    Nutze Eclipse . Bitte um Hilfe

    #ifndef ASCIISCREENSOLUTION_MYCODE_CRECTANGLE_H_
    #define ASCIISCREENSOLUTION_MYCODE_CRECTANGLE_H_
    
    #include <iostream>
    using namespace std;
    #include<string>
    
    #include "CPoint.h"
    #include "CScreen.h"
    
    
    /**
     * Diese Klasse beschreibt ein Rechteck in einem
     * Ganzzahl-Koordinatensystem ¸ber die Eigenschaften
     * "untere linke Ecke" und "obere rechte Ecke".
     *
     * Als zus‰tzliche Eigenschaft hat die Klasse ein Zeichen
     * (char) das bei der graphischen Darstellung als
     * F¸llzeichen verwendet wird.
     */
    class CRectangle
    {
    private:
    
    	CPoint m_bottomLeft;
        CPoint m_topRight;
    
    	 char m_fillChar;
    
    public:
    	/**
    	 * Erzeugt ein neues Rechteck mit linker unterer und
    	 * rechter oberer Ecke bei (0,0) und dem angegebenen
    	 * F¸llzeichen.
    	 */
    	CRectangle(char 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ˆfler 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ˆfler als
    	 * die y-Koordinate der linken unteren Ecke ist, wird sie auf
    	 * dem Wert der y-Koordinate der linken unteren Ecke gesetzt.
    	 */
    	CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar = '#');
    
    	/**
    	 * Weist den Eigenschaften "linke untere Ecke" und "rechte obere
    	 * Ecke" neue Werte zu.
    	 *
    	 * Vor der Zuweisung wird die Zusicherung ¸berpr¸ft, dass die
    	 * rechte obere Ecke rechts von und oberhalt der linken
    	 * unteren Ecke liegen muss! Ist das nicht der Fall wird keines
    	 * der Attribute ver‰ndert.
    	 */
    	void setCorners (CPoint bottomLeft, CPoint topRight);
    
    	/**
    	 * Liefert die linke untere Ecke des Rechtecks zur¸ck.
    	 */
    	CPoint getBottomLeftCorner();
    
    	/**
    	 * Liefert die rechte obere Ecke des Rechtecks zur¸ck.
    	 */
    	CPoint getTopRightCorner() const;
    
    	/**
    	 * Weist dem F¸llzeichen den angegebene Wert zu.
    	 */
    	void setFillChar(char fillChar = '#');
    
    	/**
    	 * Liefert den Wert des F¸llzeichens.
    	 */
    	char getFillChar() const;
    
    	/**
    	 * Pr¸ft, ob die beiden Rechtecke in allen Eigenschaften ¸bereinstimmen.
    	 */
    	bool operator== (const CRectangle& other) const;
    
    	/**
    	 * Zeichnet das Rechteck in das ¸bergebene Bildschirmobjekt. Das heisst,
    	 * es werden mit CScreen::setPoint die Werte aller "Punkte", die im
    	 * Bereich des Rechtecks liegen, auf das F¸llzeichen des Rechtecks gesetzt.
    	 */
    	void draw(CScreen& screen) const;
    
    	/**
    	 * Gibt eine textuelle Darstellung des Rechtecks auf dem ¸bergebenen
    	 * Ausgabestrom aus. Das Format ist in der Aufgabenstellung beschrieben.
    	 */
    	friend ostream& operator<< (ostream& lhs, const CRectangle& rhs);
    };
    ostream& operator<< (ostream& lhs, const CRectangle& rhs);
    
    #endif /* ASCIISCREENSOLUTION_MYCODE_CRECTANGLE_H_ */
    
    

    Die Klasse CPoint war bei der Aufgabe vorgegeben . Nur bei rectangle cpp habe ich selber implementiert .Ich habe auch alle Header includiert .

    #include<iostream>
    using namespace std;
    #include "CRectangle.h"
    #include "CPoint.h"
    
    
    CRectangle::CRectangle(char fillChar)
    {
    	m_fillChar = fillChar;
    }
    
    
    
    
    CRectangle::CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar)
    {
    	m_fillChar = fillChar;
    	if(topRight.getX() < bottomLeft.getX()){
    		topRight.setX(bottomLeft.getX());
    	}
    
        if(topRight.getY() < bottomLeft.getY()){
             topRight.setY(bottomLeft.getY());
    }
    }
    
    
    void CRectangle::setCorners(CPoint bottomLeft, CPoint topRight)
    {
    
    	if(topRight.getX() > bottomLeft.getX()){
    		   m_topRight = topRight;
    		   m_bottomLeft = bottomLeft;
    		}
    
    	    if(topRight.getY() >bottomLeft.getY()){
    	         m_bottomLeft = bottomLeft;
    	         m_topRight = topRight;
    	}
    }
    
    CPoint CRectangle::getBottomLeftCorner() const
    {
    	return m_bottomLeft;
    }
    
    CPoint CRectangle::getTopRightCorner() const
    {
    	return m_topRight;
    
    }
    
    void CRectangle::setFillChar(char fillChar)
    {
    	m_fillChar = fillChar;
    }
    
    char CRectangle::getFillChar() const
    {
    	return m_fillChar;
    }
    
    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
    }
    
    ostream& operator<< (ostream& lhs, const CRectangle& rhs){
    
    	lhs << "CRectangle[(" << rhs.getBottomLeftCorner().getX() << "," <<rhs.getTopRightCorner().getY() << ")"<< ","<< "("<<rhs.getTopRightCorner().getX()<< ","<< rhs.getTopRightCorner().getY()<<"),"<< rhs.getFillChar()<<"]" << endl;
    	return lhs;
    
    }
    
    
    
    ```cpp
    
    #ifndef ASCIISCREENSOLUTION_MYCODE_CPOINT_H_
    #define ASCIISCREENSOLUTION_MYCODE_CPOINT_H_
    #include<iostream>
    using namespace std;
    #include "CRectangle.h"
    #include"CScreen.h"
    
    
    /**
     * Diese Klasse repr‰sentiert einen Punkt ein einem Ganzzahl-Koordinatensystem.
     */
    class CPoint
    {
    private:
    	/** Die x-Koordinate (Spalte) */
    	int m_x;
    	/** Die y-Koordinate (Zeile) */
    	int m_y;
    
    public:
    	/**
    	 * Erzeugt ein neues Objekt mit den angegeben
    	 * Werten f¸r die x- und y-Koordinate.
    	 */
    	CPoint(int x = 0, int y = 0);
    
    	/**
    	 * Setzt die x-Koordinate auf den angegebenen Wert.
    	 */
    	void setX(int x);
    
    	/**
    	 * Setzt die y-Koordinate auf den angegebenen Wert.
    	 */
    	void setY(int y);
    
    	/**
    	 * Liefert den Wert der x-Koordinate.
    	 */
    	int getX() const;
    
    	/**
    	 * Liefert den Wert der y-Koordinate.
    	 */
    	int getY() const;
    
    	/**
    	 * Pr¸ft, ob die x- und y-Koordinaten der Punkte ¸bereinstimmen.
    	 */
    	bool operator== (const CPoint& other) const;
    
    	/**
    	 * Pr¸ft, ob sich die x- und y-Koordinaten der Punkte unterscheiden.
    	 */
    	bool operator!= (const CPoint& other) const;
    };
    
    #endif /* ASCIISCREENSOLUTION_MYCODE_CPOINT_H_ */
    

    cpp

    
    #include<iostream>
    using namespace std;
    #include "CPoint.h"
    #include"CRectangle.h"
    #include"CScreen.h"
    
    
    
    CPoint::CPoint(int x, int y)
    {
    	m_x = x;
    	m_y = y;
    }
    
    void CPoint::setX(int x)
    {
    	m_x = x;
    }
    
    void CPoint::setY(int y)
    {
    	m_y = y;
    }
    
    int CPoint::getX() const
    {
    	return m_x;
    }
    
    int CPoint::getY() const
    {
    	return m_y;
    }
    
    bool CPoint::operator ==(const CPoint& other) const
    {
    	return m_x == other.m_x && m_y == other.m_y;
    }
    
    bool CPoint::operator !=(const CPoint& other) const
    {
    	return m_x != other.m_x || m_y != other.m_y;
    }
    
    
    
    
    
    

    Description Resource Path Location Type
    Invalid arguments '
    Candidates are:
    CPoint getBottomLeftCorner()
    ' CRectangle.cpp /WS14 line 85 Semantic Error
    Invalid overload of 'endl' CRectangle.cpp /WS14 line 85 Semantic Error
    make: *** [CPoint.o] Error 1 WS14 C/C++ Problem
    Member declaration not found CRectangle.cpp /WS14 line 51 Semantic Error
    Method 'getX' could not be resolved CRectangle.cpp /WS14 line 85 Semantic Error
    unknown type name 'CPoint' CRectangle.h /WS14 line 32 C/C++ Problem
    unknown type name 'CPoint' CRectangle.h /WS14 line 33 C/C++ Problem
    unknown type name 'CPoint' CRectangle.h /WS14 line 61 C/C++ Problem
    unknown type name 'CPoint' CRectangle.h /WS14 line 72 C/C++ Problem
    unknown type name 'CPoint' CRectangle.h /WS14 line 77 C/C++ Problem
    unknown type name 'CPoint' CRectangle.h /WS14 line 82 C/C++ Problem
    unknown type name 'CPoint' CScreen.h /WS14 line 36 C/C++ Problem

    Ich brauche keine Hilfe zu der Aufgabe . Mir reicht es wenn ihr mir hilft die Error weg zu bekommen.
    Bitte um Hilfe .
    Wobei beim ostream habe ich wohl irgendein Fehler drin😀



  • @Programmer33
    Du hast eine zirkuläre Abhängigkeit in deinen Headerdateien. CPoint.h inkludiert CRectangle.h und umgekehrt. Inkludiere in Headerdateien nur das, was wirklich gebraucht wird. CPoint.h braucht weder CRectangle.h noch CScreen.h.



  • Geil endlich sind paar Fehler weg.
    Aber ich habe immer noch paar.😀

    #ifndef ASCIISCREENSOLUTION_MYCODE_CRECTANGLE_H_
    #define ASCIISCREENSOLUTION_MYCODE_CRECTANGLE_H_
    
    #include <iostream>
    using namespace std;
    #include<string>
    #include"CScreen.h"
    #include "CPoint.h"
    
    
    
    /**
     * Diese Klasse beschreibt ein Rechteck in einem
     * Ganzzahl-Koordinatensystem ¸ber die Eigenschaften
     * "untere linke Ecke" und "obere rechte Ecke".
     *
     * Als zus‰tzliche Eigenschaft hat die Klasse ein Zeichen
     * (char) das bei der graphischen Darstellung als
     * F¸llzeichen verwendet wird.
     */
    class CRectangle
    {
    private:
    
    	CPoint m_bottomLeft;
        CPoint m_topRight;
    
    	 char m_fillChar;
    
    public:
    	/**
    	 * Erzeugt ein neues Rechteck mit linker unterer und
    	 * rechter oberer Ecke bei (0,0) und dem angegebenen
    	 * F¸llzeichen.
    	 */
    	CRectangle(char 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ˆfler 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ˆfler als
    	 * die y-Koordinate der linken unteren Ecke ist, wird sie auf
    	 * dem Wert der y-Koordinate der linken unteren Ecke gesetzt.
    	 */
    	CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar = '#');
    
    	/**
    	 * Weist den Eigenschaften "linke untere Ecke" und "rechte obere
    	 * Ecke" neue Werte zu.
    	 *
    	 * Vor der Zuweisung wird die Zusicherung ¸berpr¸ft, dass die
    	 * rechte obere Ecke rechts von und oberhalt der linken
    	 * unteren Ecke liegen muss! Ist das nicht der Fall wird keines
    	 * der Attribute ver‰ndert.
    	 */
    	void setCorners (CPoint bottomLeft, CPoint topRight);
    
    	/**
    	 * Liefert die linke untere Ecke des Rechtecks zur¸ck.
    	 */
    	CPoint getBottomLeftCorner();
    
    	/**
    	 * Liefert die rechte obere Ecke des Rechtecks zur¸ck.
    	 */
    	CPoint getTopRightCorner() const;
    
    	/**
    	 * Weist dem F¸llzeichen den angegebene Wert zu.
    	 */
    	void setFillChar(char fillChar = '#');
    
    	/**
    	 * Liefert den Wert des F¸llzeichens.
    	 */
    	char getFillChar() const;
    
    	/**
    	 * Pr¸ft, ob die beiden Rechtecke in allen Eigenschaften ¸bereinstimmen.
    	 */
    	bool operator== (const CRectangle& other) const;
    
    	/**
    	 * Zeichnet das Rechteck in das ¸bergebene Bildschirmobjekt. Das heisst,
    	 * es werden mit CScreen::setPoint die Werte aller "Punkte", die im
    	 * Bereich des Rechtecks liegen, auf das F¸llzeichen des Rechtecks gesetzt.
    	 */
    	void draw(CScreen& screen) const;
    
    	/**
    	 * Gibt eine textuelle Darstellung des Rechtecks auf dem ¸bergebenen
    	 * Ausgabestrom aus. Das Format ist in der Aufgabenstellung beschrieben.
    	 */
    	friend ostream& operator<< (ostream& lhs, const CRectangle& rhs);
    };
    ostream& operator<< (ostream& lhs, const CRectangle& rhs);
    
    #endif /* ASCIISCREENSOLUTION_MYCODE_CRECTANGLE_H_ */
    
    
    

    #include<iostream>
    using namespace std;
    #include "CRectangle.h"

    CRectangle::CRectangle(char fillChar)
    {
    m_fillChar = fillChar;
    }

    CRectangle::CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar)
    {
    m_fillChar = fillChar;
    if(topRight.getX() < bottomLeft.getX()){
    topRight.setX(bottomLeft.getX());
    }

    if(topRight.getY() < bottomLeft.getY()){
         topRight.setY(bottomLeft.getY());
    

    }
    }

    void CRectangle::setCorners(CPoint bottomLeft, CPoint topRight)
    {

    if(topRight.getX() > bottomLeft.getX()){
    	   m_topRight = topRight;
    	   m_bottomLeft = bottomLeft;
    	}
    
        if(topRight.getY() >bottomLeft.getY()){
             m_bottomLeft = bottomLeft;
             m_topRight = topRight;
    }
    

    }

    CPoint CRectangle::getBottomLeftCorner() const
    {
    return m_bottomLeft;
    }

    CPoint CRectangle::getTopRightCorner() const
    {
    return m_topRight;

    }

    void CRectangle::setFillChar(char fillChar)
    {
    m_fillChar = fillChar;
    }

    char CRectangle::getFillChar() const
    {
    return m_fillChar;
    }

    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
    }

    ostream& operator<< (ostream& lhs, const CRectangle& rhs){

    lhs << "CRectangle[(" << rhs.getBottomLeftCorner().getX() << "," <<rhs.getTopRightCorner().getY() << ")"<< ","<< "("<<rhs.getTopRightCorner().getX()<< ","<< rhs.getTopRightCorner().getY()<<"),"<< rhs.getFillChar()<<"]" << endl;
    return lhs;
    

    }
    cpp

    #ifndef ASCIISCREENSOLUTION_MYCODE_CPOINT_H_
    #define ASCIISCREENSOLUTION_MYCODE_CPOINT_H_
    #include<iostream>
    using namespace std;
    
    
    
    /**
     * Diese Klasse repr‰sentiert einen Punkt ein einem Ganzzahl-Koordinatensystem.
     */
    class CPoint
    {
    private:
    	/** Die x-Koordinate (Spalte) */
    	int m_x;
    	/** Die y-Koordinate (Zeile) */
    	int m_y;
    
    public:
    	/**
    	 * Erzeugt ein neues Objekt mit den angegeben
    	 * Werten f¸r die x- und y-Koordinate.
    	 */
    	CPoint(int x = 0, int y = 0);
    
    	/**
    	 * Setzt die x-Koordinate auf den angegebenen Wert.
    	 */
    	void setX(int x);
    
    	/**
    	 * Setzt die y-Koordinate auf den angegebenen Wert.
    	 */
    	void setY(int y);
    
    	/**
    	 * Liefert den Wert der x-Koordinate.
    	 */
    	int getX() const;
    
    	/**
    	 * Liefert den Wert der y-Koordinate.
    	 */
    	int getY() const;
    
    	/**
    	 * Pr¸ft, ob die x- und y-Koordinaten der Punkte ¸bereinstimmen.
    	 */
    	bool operator== (const CPoint& other) const;
    
    	/**
    	 * Pr¸ft, ob sich die x- und y-Koordinaten der Punkte unterscheiden.
    	 */
    	bool operator!= (const CPoint& other) const;
    };
    
    #endif /* ASCIISCREENSOLUTION_MYCODE_CPOINT_H_ */
    
    #include<iostream>
    using namespace std;
    #include "CPoint.h"
    
    
    
    
    CPoint::CPoint(int x, int y)
    {
    	m_x = x;
    	m_y = y;
    }
    
    void CPoint::setX(int x)
    {
    	m_x = x;
    }
    
    void CPoint::setY(int y)
    {
    	m_y = y;
    }
    
    int CPoint::getX() const
    {
    	return m_x;
    }
    
    int CPoint::getY() const
    {
    	return m_y;
    }
    
    bool CPoint::operator ==(const CPoint& other) const
    {
    	return m_x == other.m_x && m_y == other.m_y;
    }
    
    bool CPoint::operator !=(const CPoint& other) const
    {
    	return m_x != other.m_x || m_y != other.m_y;
    }
    
    
    
    
    
    
    

    Ich verstehe nicht was beim ostream falsch sein soll?
    Daher hier die Aufgabe:

    Es ist eine alte Klausur

    https://picload.org/view/dciiodrp/bildschirmfoto2019-01-24um13.1.png.html



  • Bitte Quelltext formatieren und Fehlermeldung posten.
    Guckst du dir deinen Beitrag nach dem Absenden nicht mehr an?



  • 
    #ifndef ASCIISCREENSOLUTION_MYCODE_CRECTANGLE_H_
    #define ASCIISCREENSOLUTION_MYCODE_CRECTANGLE_H_
    
    #include <iostream>
    using namespace std;
    #include<string>
    #include"CScreen.h"
    #include "CPoint.h"
    
    
    
    /**
     * Diese Klasse beschreibt ein Rechteck in einem
     * Ganzzahl-Koordinatensystem ¸ber die Eigenschaften
     * "untere linke Ecke" und "obere rechte Ecke".
     *
     * Als zus‰tzliche Eigenschaft hat die Klasse ein Zeichen
     * (char) das bei der graphischen Darstellung als
     * F¸llzeichen verwendet wird.
     */
    class CRectangle
    {
    private:
    
    	CPoint m_bottomLeft;
        CPoint m_topRight;
    
    	 char m_fillChar;
    
    public:
    	/**
    	 * Erzeugt ein neues Rechteck mit linker unterer und
    	 * rechter oberer Ecke bei (0,0) und dem angegebenen
    	 * F¸llzeichen.
    	 */
    	CRectangle(char 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ˆfler 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ˆfler als
    	 * die y-Koordinate der linken unteren Ecke ist, wird sie auf
    	 * dem Wert der y-Koordinate der linken unteren Ecke gesetzt.
    	 */
    	CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar = '#');
    
    	/**
    	 * Weist den Eigenschaften "linke untere Ecke" und "rechte obere
    	 * Ecke" neue Werte zu.
    	 *
    	 * Vor der Zuweisung wird die Zusicherung ¸berpr¸ft, dass die
    	 * rechte obere Ecke rechts von und oberhalt der linken
    	 * unteren Ecke liegen muss! Ist das nicht der Fall wird keines
    	 * der Attribute ver‰ndert.
    	 */
    	void setCorners (CPoint bottomLeft, CPoint topRight);
    
    	/**
    	 * Liefert die linke untere Ecke des Rechtecks zur¸ck.
    	 */
    	CPoint getBottomLeftCorner();
    
    	/**
    	 * Liefert die rechte obere Ecke des Rechtecks zur¸ck.
    	 */
    	CPoint getTopRightCorner() const;
    
    	/**
    	 * Weist dem F¸llzeichen den angegebene Wert zu.
    	 */
    	void setFillChar(char fillChar = '#');
    
    	/**
    	 * Liefert den Wert des F¸llzeichens.
    	 */
    	char getFillChar() const;
    
    	/**
    	 * Pr¸ft, ob die beiden Rechtecke in allen Eigenschaften ¸bereinstimmen.
    	 */
    	bool operator== (const CRectangle& other) const;
    
    	/**
    	 * Zeichnet das Rechteck in das ¸bergebene Bildschirmobjekt. Das heisst,
    	 * es werden mit CScreen::setPoint die Werte aller "Punkte", die im
    	 * Bereich des Rechtecks liegen, auf das F¸llzeichen des Rechtecks gesetzt.
    	 */
    	void draw(CScreen& screen) const;
    
    	/**
    	 * Gibt eine textuelle Darstellung des Rechtecks auf dem ¸bergebenen
    	 * Ausgabestrom aus. Das Format ist in der Aufgabenstellung beschrieben.
    	 */
    	friend ostream& operator<< (ostream& lhs, const CRectangle& rhs);
    };
    ostream& operator<< (ostream& lhs, const CRectangle& rhs);
    
    #endif /* ASCIISCREENSOLUTION_MYCODE_CRECTANGLE_H_ */
    
    
    
    #include<iostream>
    using namespace std;
    #include "CRectangle.h"
    
    
    
    CRectangle::CRectangle(char fillChar)
    {
    	m_fillChar = fillChar;
    }
    
    
    
    
    CRectangle::CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar)
    {
    	m_fillChar = fillChar;
    	if(topRight.getX() < bottomLeft.getX()){
    		topRight.setX(bottomLeft.getX());
    	}
    
        if(topRight.getY() < bottomLeft.getY()){
             topRight.setY(bottomLeft.getY());
    }
    }
    
    
    void CRectangle::setCorners(CPoint bottomLeft, CPoint topRight)
    {
    
    	if(topRight.getX() > bottomLeft.getX()){
    		   m_topRight = topRight;
    		   m_bottomLeft = bottomLeft;
    		}
    
    	    if(topRight.getY() >bottomLeft.getY()){
    	         m_bottomLeft = bottomLeft;
    	         m_topRight = topRight;
    	}
    }
    
    CPoint CRectangle::getBottomLeftCorner() const
    {
    	return m_bottomLeft;
    }
    
    CPoint CRectangle::getTopRightCorner() const
    {
    	return m_topRight;
    
    }
    
    void CRectangle::setFillChar(char fillChar)
    {
    	m_fillChar = fillChar;
    }
    
    char CRectangle::getFillChar() const
    {
    	return m_fillChar;
    }
    
    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
    }
    
    ostream& operator<< (ostream& lhs, const CRectangle& rhs){
    
    	lhs << "CRectangle[(" << rhs.getBottomLeftCorner().getX() << "," <<rhs.getTopRightCorner().getY() << ")"<< ","<< "("<<rhs.getTopRightCorner().getX()<< ","<< rhs.getTopRightCorner().getY()<<"),"<< rhs.getFillChar()<<"]" << endl;
    	return lhs;
    
    }
    
    
    #ifndef ASCIISCREENSOLUTION_MYCODE_CPOINT_H_
    #define ASCIISCREENSOLUTION_MYCODE_CPOINT_H_
    #include<iostream>
    using namespace std;
    
    
    
    /**
     * Diese Klasse repr‰sentiert einen Punkt ein einem Ganzzahl-Koordinatensystem.
     */
    class CPoint
    {
    private:
    	/** Die x-Koordinate (Spalte) */
    	int m_x;
    	/** Die y-Koordinate (Zeile) */
    	int m_y;
    
    public:
    	/**
    	 * Erzeugt ein neues Objekt mit den angegeben
    	 * Werten f¸r die x- und y-Koordinate.
    	 */
    	CPoint(int x = 0, int y = 0);
    
    	/**
    	 * Setzt die x-Koordinate auf den angegebenen Wert.
    	 */
    	void setX(int x);
    
    	/**
    	 * Setzt die y-Koordinate auf den angegebenen Wert.
    	 */
    	void setY(int y);
    
    	/**
    	 * Liefert den Wert der x-Koordinate.
    	 */
    	int getX() const;
    
    	/**
    	 * Liefert den Wert der y-Koordinate.
    	 */
    	int getY() const;
    
    	/**
    	 * Pr¸ft, ob die x- und y-Koordinaten der Punkte ¸bereinstimmen.
    	 */
    	bool operator== (const CPoint& other) const;
    
    	/**
    	 * Pr¸ft, ob sich die x- und y-Koordinaten der Punkte unterscheiden.
    	 */
    	bool operator!= (const CPoint& other) const;
    };
    
    #endif /* ASCIISCREENSOLUTION_MYCODE_CPOINT_H_ */
    
    
    
    
    #include<iostream>
    using namespace std;
    #include "CPoint.h"
    
    
    
    
    CPoint::CPoint(int x, int y)
    {
    	m_x = x;
    	m_y = y;
    }
    
    void CPoint::setX(int x)
    {
    	m_x = x;
    }
    
    void CPoint::setY(int y)
    {
    	m_y = y;
    }
    
    int CPoint::getX() const
    {
    	return m_x;
    }
    
    int CPoint::getY() const
    {
    	return m_y;
    }
    
    bool CPoint::operator ==(const CPoint& other) const
    {
    	return m_x == other.m_x && m_y == other.m_y;
    }
    
    bool CPoint::operator !=(const CPoint& other) const
    {
    	return m_x != other.m_x || m_y != other.m_y;
    }
    
    
    
    
    
    
    
    

    Description Resource Path Location Type
    'this' argument to member function 'getBottomLeftCorner' has type 'const CRectangle', but function is not marked const CRectangle.cpp /WS14 line 85 C/C++ Problem
    Invalid arguments '
    Candidates are:
    CPoint getBottomLeftCorner()
    ' CRectangle.cpp /WS14 line 85 Semantic Error
    Invalid overload of 'endl' CRectangle.cpp /WS14 line 85 Semantic Error
    make: *** [CRectangle.o] Error 1 WS14 C/C++ Problem
    Member declaration not found CRectangle.cpp /WS14 line 51 Semantic Error
    Method 'getX' could not be resolved CRectangle.cpp /WS14 line 85 Semantic Error
    out-of-line definition of 'getBottomLeftCorner' does not match any declaration in 'CRectangle' CRectangle.cpp /WS14 line 51 C/C++ Problem
    'getBottomLeftCorner' declared here CRectangle.h /WS14 line 77 C/C++ Problem
    member declaration does not match because it is not const qualified CRectangle.h /WS14 line 77 C/C++ Problem

    Sorry hatte es vorhin nicht gesehen .
    Hier die Fehler ?



  • Die Methode CRectangle::getBottomLeftCorner() ist nicht const (vergl. CRectangle::getTopRightCorner()). Du versuchst sie aber auf einem const CRectangle aufzurufen, und darüber beschwert sich der Compiler. Interessanterweise ist sie im Header non-const und in der .cpp Datei const. Darüber beschwert sich der Compiler auch, er findet in der .cpp Datei eine Methode, die es laut Header nicht geben sollte.
    Du musst lernen Fehlermeldungen zu lesen, der Compiler sagt dir doch schon ziemlich genau, was ihn stört.



  • ostream& operator<< (ostream& lhs, const CRectangle& rhs){
    
    	lhs << "CRectangle[(" << rhs.getBottomLeftCorner().getX() << "," <<rhs.getTopRightCorner().getY() << ")"<< ","<< "("<<rhs.getTopRightCorner().getX()<< ","<< rhs.getTopRightCorner().getY()<<"),"<< rhs.getFillChar()<<"]" << endl;
    	return lhs;
    
    }
    

    Description Resource Path Location Type
    'this' argument to member function 'getBottomLeftCorner' has type 'const CRectangle', but function is not marked const CRectangle.cpp /WS14 line 85 C/C++ ProblemDescription Resource Path Location Type
    Invalid arguments '
    Candidates are:
    CPoint getBottomLeftCorner()
    ' CRectangle.cpp /WS14 line 85 Semantic Error

    und invalid overload of endl

    Könnt ihr bitte helfen ?
    ich komme nicht auf Fehler ........😡 😭



  • Habe const eingebaut und fehler geht weg ?CPoint CRectangle::getBottomLeftCorner()const
    {
    return m_bottomLeft;
    }

    Geht das?



  • Sag´ du´s mir, du hast den Quelltext und Compiler.



  • @Programmer33 wieso invalid overload oft endl? Wieso knallt man ein using namespace std; mitten zwischen die includes? Sollte man sowas nicht sparsam benutzen und wenn dann nur in .cpp. Oder besser gar nicht. Ich schreibe jetzt extra nicht das man std:endl eigentlich nur selten wirklich braucht.

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



  • #ifndef ASCIISCREENSOLUTION_MYCODE_CRECTANGLE_H_
    #define ASCIISCREENSOLUTION_MYCODE_CRECTANGLE_H_
    
    #include <iostream>
    using namespace std;
    #include<string>
    #include"CScreen.h"
    #include "CPoint.h"
    
    
    
    /**
     * Diese Klasse beschreibt ein Rechteck in einem
     * Ganzzahl-Koordinatensystem ¸ber die Eigenschaften
     * "untere linke Ecke" und "obere rechte Ecke".
     *
     * Als zus‰tzliche Eigenschaft hat die Klasse ein Zeichen
     * (char) das bei der graphischen Darstellung als
     * F¸llzeichen verwendet wird.
     */
    class CRectangle
    {
    private:
    
    	CPoint m_bottomLeft;
        CPoint m_topRight;
    
    	 char m_fillChar;
    
    public:
    	/**
    	 * Erzeugt ein neues Rechteck mit linker unterer und
    	 * rechter oberer Ecke bei (0,0) und dem angegebenen
    	 * F¸llzeichen.
    	 */
    	CRectangle(char 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ˆfler 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ˆfler als
    	 * die y-Koordinate der linken unteren Ecke ist, wird sie auf
    	 * dem Wert der y-Koordinate der linken unteren Ecke gesetzt.
    	 */
    	CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar = '#');
    
    	/**
    	 * Weist den Eigenschaften "linke untere Ecke" und "rechte obere
    	 * Ecke" neue Werte zu.
    	 *
    	 * Vor der Zuweisung wird die Zusicherung ¸berpr¸ft, dass die
    	 * rechte obere Ecke rechts von und oberhalt der linken
    	 * unteren Ecke liegen muss! Ist das nicht der Fall wird keines
    	 * der Attribute ver‰ndert.
    	 */
    	void setCorners (CPoint bottomLeft, CPoint topRight);
    
    	/**
    	 * Liefert die linke untere Ecke des Rechtecks zur¸ck.
    	 */
    	CPoint getBottomLeftCorner() const;
    
    	/**
    	 * Liefert die rechte obere Ecke des Rechtecks zur¸ck.
    	 */
    	CPoint getTopRightCorner() const;
    
    	/**
    	 * Weist dem F¸llzeichen den angegebene Wert zu.
    	 */
    	void setFillChar(char fillChar = '#');
    
    	/**
    	 * Liefert den Wert des F¸llzeichens.
    	 */
    	char getFillChar() const;
    
    	/**
    	 * Pr¸ft, ob die beiden Rechtecke in allen Eigenschaften ¸bereinstimmen.
    	 */
    	bool operator== (const CRectangle& other) const;
    
    	/**
    	 * Zeichnet das Rechteck in das ¸bergebene Bildschirmobjekt. Das heisst,
    	 * es werden mit CScreen::setPoint die Werte aller "Punkte", die im
    	 * Bereich des Rechtecks liegen, auf das F¸llzeichen des Rechtecks gesetzt.
    	 */
    	void draw(CScreen& screen) const;
    
    	/**
    	 * Gibt eine textuelle Darstellung des Rechtecks auf dem ¸bergebenen
    	 * Ausgabestrom aus. Das Format ist in der Aufgabenstellung beschrieben.
    	 */
    	friend ostream& operator<< (ostream& lhs, const CRectangle& rhs);
    };
    ostream& operator<< (ostream& lhs, const CRectangle& rhs);
    
    
    #endif /* ASCIISCREENSOLUTION_MYCODE_CRECTANGLE_H_ */
    
    
    
    

    cpp

    #include<iostream>
    using namespace std;
    #include "CRectangle.h"
    #include"CPoint.h"
    
    
    
    CRectangle::CRectangle(char fillChar)
    {
    	m_fillChar = fillChar;
    }
    
    
    
    
    CRectangle::CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar)
    {
    	m_fillChar = fillChar;
    	if(topRight.getX() < bottomLeft.getX()){
    		topRight.setX(bottomLeft.getX());
    	}
    
        if(topRight.getY() < bottomLeft.getY()){
             topRight.setY(bottomLeft.getY());
    }
    }
    
    
    void CRectangle::setCorners(CPoint bottomLeft, CPoint topRight)
    {
    
    	if(topRight.getX() > bottomLeft.getX()){
    		   m_topRight = topRight;
    		   m_bottomLeft = bottomLeft;
    		}
    
    	    if(topRight.getY() >bottomLeft.getY()){
    	         m_bottomLeft = bottomLeft;
    	         m_topRight = topRight;
    	}
    }
    
    CPoint CRectangle::getBottomLeftCorner()const
    {
    	return m_bottomLeft;
    }
    
    CPoint CRectangle::getTopRightCorner() const
    {
    	return m_topRight;
    
    }
    
    void CRectangle::setFillChar(char fillChar)
    {
    	m_fillChar = fillChar;
    }
    
    char CRectangle::getFillChar() const
    {
    	return m_fillChar;
    }
    
    bool CRectangle::operator ==(const CRectangle& other) const
    {
    	return m_topRight == other.m_topRight &&  m_bottomLeft == other.m_bottomLeft &&m_fillChar == other.m_fillChar;
    
    }
    
    void CRectangle::draw(CScreen& screen) const
    {
    	// Bitte implementieren
    }
    
    ostream& operator<< (ostream& lhs, const CRectangle& rhs){
    
    	lhs << "CRectangle[(" << rhs.getBottomLeftCorner().getX() << "," <<rhs.getTopRightCorner().getY() << ")"<< ","<< "("<<rhs.getTopRightCorner().getX()<< ","<< rhs.getTopRightCorner().getY()<<"),"<< rhs.getFillChar()<<"]" << endl;
    	return lhs;
    
    }
    
    
    #ifndef ASCIISCREENSOLUTION_MYCODE_CPOINT_H_
    #define ASCIISCREENSOLUTION_MYCODE_CPOINT_H_
    #include<iostream>
    using namespace std;
    
    
    
    /**
     * Diese Klasse repr‰sentiert einen Punkt ein einem Ganzzahl-Koordinatensystem.
     */
    class CPoint
    {
    private:
    	/** Die x-Koordinate (Spalte) */
    	int m_x;
    	/** Die y-Koordinate (Zeile) */
    	int m_y;
    
    public:
    	/**
    	 * Erzeugt ein neues Objekt mit den angegeben
    	 * Werten f¸r die x- und y-Koordinate.
    	 */
    	CPoint(int x = 0, int y = 0);
    
    	/**
    	 * Setzt die x-Koordinate auf den angegebenen Wert.
    	 */
    	void setX(int x);
    
    	/**
    	 * Setzt die y-Koordinate auf den angegebenen Wert.
    	 */
    	void setY(int y);
    
    	/**
    	 * Liefert den Wert der x-Koordinate.
    	 */
    	int getX() const;
    
    	/**
    	 * Liefert den Wert der y-Koordinate.
    	 */
    	int getY() const;
    
    	/**
    	 * Pr¸ft, ob die x- und y-Koordinaten der Punkte ¸bereinstimmen.
    	 */
    	bool operator== (const CPoint& other) const;
    
    	/**
    	 * Pr¸ft, ob sich die x- und y-Koordinaten der Punkte unterscheiden.
    	 */
    	bool operator!= (const CPoint& other) const;
    };
    
    #endif /* ASCIISCREENSOLUTION_MYCODE_CPOINT_H_ */
    
    
    
    #include<iostream>
    using namespace std;
    #include "CPoint.h"
    
    
    
    
    CPoint::CPoint(int x, int y)
    {
    	m_x = x;
    	m_y = y;
    }
    
    void CPoint::setX(int x)
    {
    	m_x = x;
    }
    
    void CPoint::setY(int y)
    {
    	m_y = y;
    }
    
    int CPoint::getX() const
    {
    	return m_x;
    }
    
    int CPoint::getY() const
    {
    	return m_y;
    }
    
    bool CPoint::operator ==(const CPoint& other) const
    {
    	return m_x == other.m_x && m_y == other.m_y;
    }
    
    bool CPoint::operator !=(const CPoint& other) const
    {
    	return m_x != other.m_x || m_y != other.m_y;
    }
    
    
    
    
    
    
    
    #ifndef ASCIISCREENSOLUTION_MYCODE_CSCREEN_H_
    #define ASCIISCREENSOLUTION_MYCODE_CSCREEN_H_
    #include<iostream>
    using namespace std;
    #include "CPoint.h"
    #include "CRectangle.h"
    #include "CScreen.h"
    
    /**
     * Dies Klasse repr‰sentiert einen Bereich von 80x24 "Punkten",
     * die als ein beliebiges Zeichen dargestellt werden kˆnnen.
     */
    class CScreen
    {
    private:
    	/** Der Speicher f¸r die Darstellung der Punkte. */
    	char m_content[24*80];
    
    public:
    	/**
    	 * Erzeugt eine neue Darstellung, bei der alle Punkte
    	 * auf den Wert '.' gesetzt sind.
    	 */
    	CScreen();
    
    	/**
    	 * Setzt den angegebenen Punkt auf das angegebene Zeichen.
    	 */
    	void setPoint(CPoint point, char content);
    
    	/**
    	 * Gibt die Darstellung aus.
    	 */
    	void print() const;
    
    	/**
    	 * Lˆscht die Darstellung. Alle Zeichen werden wieder auf
    	 * '.' gesetzt.
    	 */
    	void clear();
    };
    
    #endif /* ASCIISCREENSOLUTION_MYCODE_CSCREEN_H_ */
    
    
    
    #include <iostream>
    #include "CScreen.h"
    using namespace std;
    
    
    
    CScreen::CScreen()
    {
    	clear();
    }
    
    void CScreen::setPoint(CPoint point, char content)
    {
    	if (point.getX() < 0 || point.getY() < 0
    			|| point.getY() * 80 + point.getX() >= 24*80) {
    		return;
    	}
    	m_content[point.getY() * 80 + point.getX()] = content;
    }
    
    void CScreen::print() const
    {
    	cout << "    ";
    	for (int col = 0; col < 80; col++) {
    		cout << col / 10;
    	}
    	cout << endl;
    	cout << "    ";
    	for (int col = 0; col < 80; col++) {
    		cout << col % 10;
    	}
    	cout << endl;
    	for (int row = 23; row >= 0; row--) {
    		if (row < 10) {
    			cout << ' ';
    		}
    		cout << row << ": ";
    		for (int col = 0; col < 80; col++) {
    			cout << m_content[row * 80 + col];
    		}
    		cout << endl;
    	}
    	cout << endl;
    }
    
    void CScreen::clear() {
    	for (int i = 0; i < 24*80; i++) {
    		m_content[i] = '.';
    	}
    }
    
    
    
    
    
    

    Leute ich habe nach etlichen Stunden jetzt nur noch 2 Error?
    Description Resource Path Location Type
    make: *** [CScreen.o] Error 1 WS14 C/C++ Problem
    unknown type name 'CScreen' CRectangle.h /WS14 line 104 C/C++ Problem

    Warum der CSreen nicht erkennt ?
    Ich bin kein Informatiker und bin überfordert ?



  • @Programmer33 rekursives include? (getippt)

    Edit: und immer noch using... mittendrin...



  • Wo soll denn using raus ?
    Unser Prof erklärt uns nichts .
    Und beim lernen bin ich auf mich selber angewiesen .

    Drehe durch bei den vielen Codes ?

    Welches rekursive ?



  • @Programmer33 using namespace ... niemals (niemals), also gar niemals vor einem include!



  • @Programmer33 egal ob Studium oder Ausbildung: Breymann der c++-Programmierer. Aktuell für c++17. Hoffe ich bekomme irgendwann provision 😉

    Da kannst dich bei sowas nicht auf das Unterrichtsmaterial verlassen. Man braucht extra was genaues zum nachschlagen...



  • @Programmer33 sagte in C++ Error:

    Welches rekursive ?

    #include "CScreen.h"  // hier in dieser Datei "CScreen.h" soll 
                          // also die "CScreen.h" eingefügt werden??
    
    /**
     * Dies Klasse repr‰sentiert einen Bereich von 80x24 "Punkten",
     * die als ein beliebiges Zeichen dargestellt werden kˆnnen.
     */
    class CScreen
    {
    private:
    

    Diese. Vorrausgesetzt dies ist ein Teil der Datei „CScreen.h“ was ich nur raten kann...

    hth

    Edit: include-guard hast du ja. Trotzdem unsinnig die Zeile...



  • oh man weiss auch nicht wie ich das gemacht habe .
    Aus versehen wohl.
    Aber auch nach beseitigen dieses Fehler : Immer noch error

    Woran kann es liegen?



  • @Programmer33 ups, ich sehe gerade der Fehler war ja in der CRect...



  • habe auch die using namespace nach dem Include eingebaut ?
    Iostream auch nach include ?



  • ja in der Rectangle wird hier gemeckert ?
    Es erkennt das CScreen nicht ?

    void draw(CScreen& screen) const;


  • @Programmer33 Nehme erstmal in allen *.h das using komplett raus. Wenn es irgendwo gebraucht wird mach jeweils ein std:: vor...

    Dann in allen *.cpp das using namespace unter dem letzten include. Oder nimm es auch raus und mach auch immer ein std:: vor (std::endl, std::cout etc)


Anmelden zum Antworten