Forum: Offtopic C++ Programmierung


von Hulk H. (hulk23)


Lesenswert?

Hallo alle zusammen bin gerade an einer neuen Aufgabe tran.
Es soll eine Klasse CRectangle implementiert werden, die ein Rechteck 
modelliert. Das Rechteck wird
durch die Eigenschaften „linke untere Ecke“, „rechte obere Ecke“ und ein 
„Füllzeichen“ beschrieben, das
später für die graphische Darstellung (s. u.) verwendet wird. Die Klasse 
CPoint zur Repräsentation
einer Koordinate ist bereits vorgegeben. Verändern Sie den Quellcode 
dieser Klasse nicht! Die
Klassendefinition der Klasse CRectangle ist ebenfalls bereits 
vorgegeben. Beachten Sie die Hinweise
in den Kommentaren der Klassendefinition.


Mir werden Fehler beim ersten Konstruktor angezeigt .

Habe gedacht ,dass ich erstmal nachfrage und versuche den Fehler zu 
beseitigen :

a) Um Ihnen unnötige Tipp-Zeit zu ersparen, gibt es für alle Methoden 
von CRectangle in der Datei CRectangle.cpp bereits unvollständige 
„Rumpf-Implementierungen“. Wenn eine Methode einen Wert zurück gibt, 
steht dort auch ein return-Statement mit einem DefaultWert. Ergänzen Sie 
in den folgenden Teilaufgaben diese „Rumpf-Implementierungen“ und 
ersetzen Sie ein evtl. bereits vorhandenes return-Statement durch den 
korrekten Code.
b) Implementieren Sie die Konstruktoren. Berücksichtigen Sie bei dem 
Konstruktor mit drei Parametern die im Kommentar beschriebenen 
Zusicherungen (Datei CRectangle.h, Zeile 49ff.). Das Verhalten für den 
Fall, dass ein Parameter die Zusicherung verletzt, ist ebenfalls im 
Kommentar beschrieben.
c) Implementieren Sie die Methode setCorners unter Berücksichtigung der 
im Kommentar beschriebenen Zusicherung. Das Verhalten für den Fall, dass 
ein Parameter die Zusicherung verletzt, ist ebenfalls im Kommentar 
beschrieben.
d) Implementieren Sie die Methoden getBottomLeftCorner und 
getTopRightCorner.
e) Implementieren Sie die Methode setFillChar und getFillChar.

Header :
1
#ifndef ASCIISCREENSOLUTION_MYCODE_CRECTANGLE_H_
2
#define ASCIISCREENSOLUTION_MYCODE_CRECTANGLE_H_
3
4
#include <ostream>
5
using namespace std;
6
7
#include "CPoint.h"
8
#include "CScreen.h"
9
10
/**
11
 * Diese Klasse beschreibt ein Rechteck in einem
12
 * Ganzzahl-Koordinatensystem �ber die Eigenschaften
13
 * "untere linke Ecke" und "obere rechte Ecke".
14
 *
15
 * Als zus�tzliche Eigenschaft hat die Klasse ein Zeichen
16
 * (char) das bei der graphischen Darstellung als
17
 * F�llzeichen verwendet wird.
18
 */
19
class CRectangle
20
{
21
private:
22
    /** Die linke untere Ecke. */
23
    CPoint m_bottomLeft;
24
    /** Die rechte obere Ecke. */
25
    CPoint m_topRight;
26
    /** Das F�llzeichen f�r die graphische Darstellung. */
27
    char m_fillChar;
28
29
public:
30
    /**
31
    * Erzeugt ein neues Rechteck mit linker unterer und
32
    * rechter oberer Ecke bei (0,0) und dem angegebenen
33
    * F�llzeichen.
34
    */
35
    CRectangle(char fillChar = '#');
36
37
    /**
38
    * Erzeugt ein neues Rechteck mit der angegebenen linken
39
    * unteren und rechten oberen Ecken sowie dem angegebenen
40
    * F�llzeichen.
41
    *
42
    * Beim Erzeugen wird die Zusicherung �berpr�ft, dass die
43
    * rechte obere Ecke rechts von und oberhalt der linken
44
    * unteren Ecke liegen muss! Falls die x-Koordinate
45
    * der rechten oberen Ecke nicht gr��er als die x-Koordinate
46
    * der linken unteren Ecke ist, wird sie auf den Wert
47
    * der x-Koordinate der linken unteren Ecke gesetzt. Falls
48
    * die y-Koordinate der rechten oberen Ecke nicht gr��er als
49
    * die y-Koordinate der linken unteren Ecke ist, wird sie auf
50
    * dem Wert der y-Koordinate der linken unteren Ecke gesetzt.
51
    */
52
    CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar = '#');
53
54
    /**
55
    * Weist den Eigenschaften "linke untere Ecke" und "rechte obere
56
    * Ecke" neue Werte zu.
57
    *
58
    * Vor der Zuweisung wird die Zusicherung �berpr�ft, dass die
59
    * rechte obere Ecke rechts von und oberhalt der linken
60
    * unteren Ecke liegen muss! Ist das nicht der Fall wird keines
61
    * der Attribute ver�ndert.
62
    */
63
    void setCorners (CPoint bottomLeft, CPoint topRight);
64
65
    /**
66
    * Liefert die linke untere Ecke des Rechtecks zur�ck.
67
    */
68
    CPoint getBottomLeftCorner() const;
69
70
    /**
71
    * Liefert die rechte obere Ecke des Rechtecks zur�ck.
72
    */
73
    CPoint getTopRightCorner() const;
74
75
    /**
76
    * Weist dem F�llzeichen den angegebene Wert zu.
77
    */
78
    void setFillChar(char fillChar = '#');
79
80
    /**
81
    * Liefert den Wert des F�llzeichens.
82
    */
83
    char getFillChar() const;
84
85
    /**
86
    * Pr�ft, ob die beiden Rechtecke in allen Eigenschaften �bereinstimmen.
87
    */
88
    bool operator== (const CRectangle& other) const;
89
90
    /**
91
    * Zeichnet das Rechteck in das �bergebene Bildschirmobjekt. Das heisst,
92
    * es werden mit CScreen::setPoint die Werte aller "Punkte", die im 
93
    * Bereich des Rechtecks liegen, auf das F�llzeichen des Rechtecks gesetzt.
94
    */
95
    void draw(CScreen& screen) const;
96
97
    /**
98
    * Gibt eine textuelle Darstellung des Rechtecks auf dem �bergebenen
99
    * Ausgabestrom aus. Das Format ist in der Aufgabenstellung beschrieben.
100
    */
101
    friend ostream& operator<< (ostream& lhs, const CRectangle& rhs);
102
};
103
104
#endif /* ASCIISCREENSOLUTION_MYCODE_CRECTANGLE_H_ */



cpp
1
* CRectangle.cpp
2
 *
3
 *  Created on: 05.02.2015
4
 *      Author: lipp
5
 */
6
7
#include "CRectangle.h"
8
9
CRectangle::CRectangle(char fillChar)
10
{
11
    m_fillChar = fillChar;
12
    /**
13
         * Erzeugt ein neues Rechteck mit der angegebenen linken
14
         * unteren und rechten oberen Ecken sowie dem angegebenen
15
         * F�llzeichen.
16
         *
17
         * Beim Erzeugen wird die Zusicherung �berpr�ft, dass die
18
         * rechte obere Ecke rechts von und oberhalt der linken
19
         * unteren Ecke liegen muss! Falls die x-Koordinate
20
         * der rechten oberen Ecke nicht gr��er als die x-Koordinate
21
         * der linken unteren Ecke ist, wird sie auf den Wert
22
         * der x-Koordinate der linken unteren Ecke gesetzt. Falls
23
         * die y-Koordinate der rechten oberen Ecke nicht gr��er als
24
         * die y-Koordinate der linken unteren Ecke ist, wird sie auf
25
         * dem Wert der y-Koordinate der linken unteren Ecke gesetzt.
26
         */
27
    if(x_topRight < x_bottomLeft ){
28
29
        x_topRight = x_bottomLeft;
30
    }
31
32
    if(y_topRight < y_bottomLeft){
33
34
        y_topRight = y_bottomLeft;
35
    }
36
}
37
38
CRectangle::CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar)
39
{
40
    // Bitte implementieren
41
42
}
43
44
void CRectangle::setCorners(CPoint bottomLeft, CPoint topRight)
45
{
46
    // Bitte implementieren
47
}
48
49
CPoint CRectangle::getBottomLeftCorner() const
50
{
51
    // Bitte implementieren und dabei das return-Statement ersetzen.
52
    return CPoint();
53
}
54
55
CPoint CRectangle::getTopRightCorner() const
56
{
57
    // Bitte implementieren und dabei das return-Statement ersetzen.
58
    return CPoint();
59
}
60
61
void CRectangle::setFillChar(char fillChar)
62
{
63
    // Bitte implementieren
64
}
65
66
char CRectangle::getFillChar() const
67
{
68
    // Bitte implementieren und dabei das return-Statement ersetzen.
69
    return 0;
70
}
71
72
bool CRectangle::operator ==(const CRectangle& other) const
73
{
74
    // Bitte implementieren und dabei das return-Statement ersetzen.
75
    return false;
76
}
77
78
void CRectangle::draw(CScreen& screen) const
79
{
80
    // Bitte implementieren
81
}
Mein Konstruktor zeigt mir zu viele Fehler an ?

Ist es falsch implementiert ?
Description Resource Path Location Type
Symbol 'x_bottomLeft' could not be resolved CRectangle.cpp /CRectangle 
line 30 Semantic Error
Symbol 'x_topRight' could not be resolved CRectangle.cpp /CRectangle 
line 30 Semantic Error
Symbol 'y_topRight' could not be resolved CRectangle.cpp /CRectangle 
line 35 Semantic Error
Symbol 'y_topRight' could not be resolved CRectangle.cpp /CRectangle 
line 33 Semantic Error
Symbol 'y_bottomLeft' could not be resolved CRectangle.cpp /CRectangle 
line 33 Semantic Error
Symbol 'y_bottomLeft' could not be resolved CRectangle.cpp /CRectangle 
line 35 Semantic Error
Member 'm_fillChar' was not initialized in this constructor 
CRectangle.cpp /CRectangle line 39 Code Analysis Problem
Symbol 'x_bottomLeft' could not be resolved CRectangle.cpp /CRectangle 
line 28 Semantic Error
Symbol 'x_topRight' could not be resolved CRectangle.cpp /CRectangle 
line 28 Semantic Error


Sind meine Zusicherungen falsch oder wie ?

: Verschoben durch Moderator
von Dr. Sommer (Gast)


Lesenswert?

Hulk H. schrieb:
> Sind meine Zusicherungen falsch oder wie ?
Was könnte die Fehlermeldung denn bedeuten? Wo sind die Variablen 
"x_topRight" usw. definiert?

von b4d4u (Gast)


Lesenswert?

Da fehlt noch ein
1
#define x_bottomLeft m_bottomLeft.x
2
#define y_bottomLeft m_bottomLeft.y
3
#define x_topRight m_topRight.x
4
#define y_topRight m_topRight.y
nach den <include>s, damit der Compiler es frisst.

b4d4u

von Walter S. (avatar)


Lesenswert?

b4d4u schrieb:
> Da fehlt noch ein
> #define x_bottomLeft m_bottomLeft.x

schön ist aber anders

von Dr. Sommer (Gast)


Lesenswert?

b4d4u schrieb:
> Da fehlt noch ein

Damit sich der offensichtliche Anfänger gleich furchtbare Hacks 
angewöhnt, anstatt dieses triviale Problem auf die direkte simple Art zu 
lösen?

Beitrag #5127920 wurde von einem Moderator gelöscht.
Beitrag #5127929 wurde von einem Moderator gelöscht.
Beitrag #5127937 wurde von einem Moderator gelöscht.
von Rolf M. (rmagnus)


Lesenswert?

Hulk H. schrieb:
> Mein Konstruktor zeigt mir zu viele Fehler an ?

"zu viele"? Wie viele sollen es denn sein?

> Ist es falsch implementiert ?

Ganz offensichtlich ja. Sonst hättest du ja nur so viele Fehler wie 
gewünscht. ;-)

> Description Resource Path Location Type
> Symbol 'x_bottomLeft' could not be resolved CRectangle.cpp /CRectangle
> line 30 Semantic Error

Weißt du, was diese Fehlermeldung auf Deutsch heißt? Was könnte sie dir 
wohl sagen wollen?

Beitrag #5128000 wurde von einem Moderator gelöscht.
von Hulk H. (hulk23)


Lesenswert?

Die CPoint Klasse sieht so aus :
1
#ifndef ASCIISCREENSOLUTION_MYCODE_CPOINT_H_
2
#define ASCIISCREENSOLUTION_MYCODE_CPOINT_H_
3
4
/**
5
 * Diese Klasse repr�sentiert einen Punkt ein einem Ganzzahl-Koordinatensystem.
6
 */
7
class CPoint
8
{
9
private:
10
  /** Die x-Koordinate (Spalte) */
11
  int m_x;
12
  /** Die y-Koordinate (Zeile) */
13
  int m_y;
14
15
public:
16
  /**
17
   * Erzeugt ein neues Objekt mit den angegeben
18
   * Werten f�r die x- und y-Koordinate.
19
   */
20
  CPoint(int x = 0, int y = 0);
21
22
  /**
23
   * Setzt die x-Koordinate auf den angegebenen Wert.
24
   */
25
  void setX(int x);
26
27
  /**
28
   * Setzt die y-Koordinate auf den angegebenen Wert.
29
   */
30
  void setY(int y);
31
32
  /**
33
   * Liefert den Wert der x-Koordinate.
34
   */
35
  int getX() const;
36
37
  /**
38
   * Liefert den Wert der y-Koordinate.
39
   */
40
  int getY() const;
41
42
  /**
43
   * Pr�ft, ob die x- und y-Koordinaten der Punkte �bereinstimmen.
44
   */
45
  bool operator== (const CPoint& other) const;
46
47
  /**
48
   * Pr�ft, ob sich die x- und y-Koordinaten der Punkte unterscheiden.
49
   */
50
  bool operator!= (const CPoint& other) const;
51
};
52
53
#endif /* ASCIISCREENSOLUTION_MYCODE_CPOINT_H_ */

cpp
1
#include "CPoint.h"
2
3
CPoint::CPoint(int x, int y)
4
{
5
  m_x = x;
6
  m_y = y;
7
}
8
9
void CPoint::setX(int x)
10
{
11
  m_x = x;
12
}
13
14
void CPoint::setY(int y)
15
{
16
  m_y = y;
17
}
18
19
int CPoint::getX() const
20
{
21
  return m_x;
22
}
23
24
int CPoint::getY() const
25
{
26
  return m_y;
27
}
28
29
bool CPoint::operator ==(const CPoint& other) const
30
{
31
  return m_x == other.m_x && m_y == other.m_y;
32
}
33
34
bool CPoint::operator !=(const CPoint& other) const
35
{
36
  return m_x != other.m_x || m_y != other.m_y;
37
}


Aber nach dem define sind meine Fehler immer noch nicht weg ?
1
#include "CRectangle.h"
2
#define x_bottomLeft m_bottomLeft.x
3
#define y_bottomLeft m_bottomLeft.y
4
#define x_topRight m_topRight.x
5
#define y_topRight m_topRight.y
6
CRectangle::CRectangle(char fillChar)
7
8
{
9
  m_fillChar = fillChar;
10
  /**
11
     * Erzeugt ein neues Rechteck mit der angegebenen linken
12
     * unteren und rechten oberen Ecken sowie dem angegebenen
13
     * F�llzeichen.
14
     *
15
     * Beim Erzeugen wird die Zusicherung �berpr�ft, dass die
16
     * rechte obere Ecke rechts von und oberhalt der linken
17
     * unteren Ecke liegen muss! Falls die x-Koordinate
18
     * der rechten oberen Ecke nicht gr��er als die x-Koordinate
19
     * der linken unteren Ecke ist, wird sie auf den Wert
20
     * der x-Koordinate der linken unteren Ecke gesetzt. Falls
21
     * die y-Koordinate der rechten oberen Ecke nicht gr��er als
22
     * die y-Koordinate der linken unteren Ecke ist, wird sie auf
23
     * dem Wert der y-Koordinate der linken unteren Ecke gesetzt.
24
     */
25
  if(topRight.x < bottomLeft.x ){
26
27
    m_topRight.x = bottomLeft.x;
28
  }
29
30
  if(topRight.y < bottomLeft.y){
31
32
    m_topRight.y = bottomLeft.y;
33
  }
34
}
35
36
CRectangle::CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar)
37
{
38
  // Bitte implementieren
39
40
}
41
42
void CRectangle::setCorners(CPoint bottomLeft, CPoint topRight)
43
{
44
  // Bitte implementieren
45
}
46
47
CPoint CRectangle::getBottomLeftCorner() const
48
{
49
  // Bitte implementieren und dabei das return-Statement ersetzen.
50
  return CPoint();
51
}
52
53
CPoint CRectangle::getTopRightCorner() const
54
{
55
  // Bitte implementieren und dabei das return-Statement ersetzen.
56
  return CPoint();
57
}
58
59
void CRectangle::setFillChar(char fillChar)
60
{
61
  // Bitte implementieren
62
}
63
64
char CRectangle::getFillChar() const
65
{
66
  // Bitte implementieren und dabei das return-Statement ersetzen.
67
  return 0;
68
}
69
70
bool CRectangle::operator ==(const CRectangle& other) const
71
{
72
  // Bitte implementieren und dabei das return-Statement ersetzen.
73
  return false;
74
}
75
76
void CRectangle::draw(CScreen& screen) const
77
{
78
  // Bitte implementieren
79
}



Fehler

Description  Resource  Path  Location  Type
Symbol 'topRight' could not be resolved  CRectangle.cpp  /CRectangle 
line 37  Semantic Error
Field 'x' could not be resolved  CRectangle.cpp  /CRectangle  line 34 
Semantic Error
Field 'y' could not be resolved  CRectangle.cpp  /CRectangle  line 37 
Semantic Error
Field 'y' could not be resolved  CRectangle.cpp  /CRectangle  line 37 
Semantic Error
Symbol 'bottomLeft' could not be resolved  CRectangle.cpp  /CRectangle 
line 39  Semantic Error
Field 'y' could not be resolved  CRectangle.cpp  /CRectangle  line 39 
Semantic Error
Symbol 'bottomLeft' could not be resolved  CRectangle.cpp  /CRectangle 
line 37  Semantic Error
make: *** [CRectangle.o] Fehler 1  CRectangle       C/C++ Problem
Symbol 'topRight' could not be resolved  CRectangle.cpp  /CRectangle 
line 32  Semantic Error
Member 'm_fillChar' was not initialized in this constructor 
CRectangle.cpp  /CRectangle  line 43  Code Analysis Problem
Field 'y' could not be resolved  CRectangle.cpp  /CRectangle  line 39 
Semantic Error
‘x_bottomLeft’ was not declared in this scope  CRectangle.cpp 
/CRectangle  line 28  C/C++ Problem
‘x_topRight’ was not declared in this scope  CRectangle.cpp  /CRectangle 
line 28  C/C++ Problem
‘y_bottomLeft’ was not declared in this scope  CRectangle.cpp 
/CRectangle  line 33  C/C++ Problem
‘y_topRight’ was not declared in this scope  CRectangle.cpp  /CRectangle 
line 33  C/C++ Problem
die Regel für Ziel „CRectangle.o“ scheiterte  subdir.mk 
/CRectangle/Debug  line 27  C/C++ Problem
Symbol 'bottomLeft' could not be resolved  CRectangle.cpp  /CRectangle 
line 32  Semantic Error
Symbol 'bottomLeft' could not be resolved  CRectangle.cpp  /CRectangle 
line 34  Semantic Error
Field 'x' could not be resolved  CRectangle.cpp  /CRectangle  line 32 
Semantic Error
Field 'x' could not be resolved  CRectangle.cpp  /CRectangle  line 34 
Semantic Error
Field 'x' could not be resolved  CRectangle.cpp  /CRectangle  line 32 
Semantic Error

Beitrag #5129082 wurde von einem Moderator gelöscht.
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Hulk H. schrieb:
> Fehler
Ist doch schön, dass dir jemand sagt, wo die Fehler sind.
Jetzt musst du sie nur noch beheben. Ein Tipp: fang beim ersten an (und 
beachte auch Warnungen, die evtl noch davor kommen), nachfolgende Fehler 
könnten auch Folgefehler sein, die sich nach Beheben des ersten 
automatisch lösen.

Als Tipp: den Prozess der während des Beheben der Fehler abläuft, nennt 
man "Lernen".

von g4u (Gast)


Lesenswert?

Da fehlt noch ein
1
#define topRight m_topRight
2
#define bottomLeft m_BottomLeft
3
#define x m_x
4
#define y m_y
5
#define private public
damit der Compiler es frisst.

von Hulk H. (hulk23)


Lesenswert?

Ich habe das define eingefügt aber die Fehler gehen nicht weg?
1
#include "CRectangle.h"
2
3
#define topRight m_topRight
4
#define bottomLeft m_BottomLeft
5
#define x m_x
6
#define y m_y
7
#define private public
8
CRectangle::CRectangle(char fillChar)
9
10
{
11
  m_fillChar = fillChar;
12
  /**
13
     * Erzeugt ein neues Rechteck mit der angegebenen linken
14
     * unteren und rechten oberen Ecken sowie dem angegebenen
15
     * F�llzeichen.
16
     *
17
     * Beim Erzeugen wird die Zusicherung �berpr�ft, dass die
18
     * rechte obere Ecke rechts von und oberhalt der linken
19
     * unteren Ecke liegen muss! Falls die x-Koordinate
20
     * der rechten oberen Ecke nicht gr��er als die x-Koordinate
21
     * der linken unteren Ecke ist, wird sie auf den Wert
22
     * der x-Koordinate der linken unteren Ecke gesetzt. Falls
23
     * die y-Koordinate der rechten oberen Ecke nicht gr��er als
24
     * die y-Koordinate der linken unteren Ecke ist, wird sie auf
25
     * dem Wert der y-Koordinate der linken unteren Ecke gesetzt.
26
     */
27
  if(topRight.x < bottomLeft.x ){
28
29
    m_topRight.x = bottomLeft.x;
30
  }
31
32
  if(topRight.y < bottomLeft.y){
33
34
    m_topRight.y = bottomLeft.y;
35
  }
36
}
37
38
CRectangle::CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar)
39
{
40
  // Bitte implementieren
41
42
}
43
44
void CRectangle::setCorners(CPoint bottomLeft, CPoint topRight)
45
{
46
  // Bitte implementieren
47
}
48
49
CPoint CRectangle::getBottomLeftCorner() const
50
{
51
  // Bitte implementieren und dabei das return-Statement ersetzen.
52
  return CPoint();
53
}
54
55
CPoint CRectangle::getTopRightCorner() const
56
{
57
  // Bitte implementieren und dabei das return-Statement ersetzen.
58
  return CPoint();
59
}
60
61
void CRectangle::setFillChar(char fillChar)
62
{
63
  // Bitte implementieren
64
}
65
66
char CRectangle::getFillChar() const
67
{
68
  // Bitte implementieren und dabei das return-Statement ersetzen.
69
  return 0;
70
}
71
72
bool CRectangle::operator ==(const CRectangle& other) const
73
{
74
  // Bitte implementieren und dabei das return-Statement ersetzen.
75
  return false;
76
}
77
78
void CRectangle::draw(CScreen& screen) const
79
{
80
  // Bitte implementieren
81
}

von rmu (Gast)


Lesenswert?

Tu die #defines weg, die sind Blödsinn.

von g4u (Gast)


Lesenswert?

Die Defines müssen ganz an den Anfang von CRectangle.cpp, noch vor:
1
#include "CRectangle.h"

von Hulk H. (hulk23)


Lesenswert?

In dem ich die defines höher gesetzt habe sind paar Fehler weg aber 
immer noch viele da ?

Aber wenn das mit den defines blödsinn wo liegt dann der Fehler ?

1
#define topRight m_topRight
2
#define bottomLeft m_BottomLeft
3
#define x m_x
4
#define y m_y
5
#define private public
6
#include "CRectangle.h"
7
8
9
CRectangle::CRectangle(char fillChar)
10
11
{
12
  m_fillChar = fillChar;
13
  /**
14
     * Erzeugt ein neues Rechteck mit der angegebenen linken
15
     * unteren und rechten oberen Ecken sowie dem angegebenen
16
     * F�llzeichen.
17
     *
18
     * Beim Erzeugen wird die Zusicherung �berpr�ft, dass die
19
     * rechte obere Ecke rechts von und oberhalt der linken
20
     * unteren Ecke liegen muss! Falls die x-Koordinate
21
     * der rechten oberen Ecke nicht gr��er als die x-Koordinate
22
     * der linken unteren Ecke ist, wird sie auf den Wert
23
     * der x-Koordinate der linken unteren Ecke gesetzt. Falls
24
     * die y-Koordinate der rechten oberen Ecke nicht gr��er als
25
     * die y-Koordinate der linken unteren Ecke ist, wird sie auf
26
     * dem Wert der y-Koordinate der linken unteren Ecke gesetzt.
27
     */
28
  if(topRight.x < bottomLeft.x ){
29
30
    m_topRight.x = bottomLeft.x;
31
  }
32
33
  if(topRight.y < bottomLeft.y){
34
35
    m_topRight.y = bottomLeft.y;
36
  }
37
}
38
39
CRectangle::CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar)
40
{
41
  // Bitte implementieren
42
43
}
44
45
void CRectangle::setCorners(CPoint bottomLeft, CPoint topRight)
46
{
47
  // Bitte implementieren
48
}
49
50
CPoint CRectangle::getBottomLeftCorner() const
51
{
52
  // Bitte implementieren und dabei das return-Statement ersetzen.
53
  return CPoint();
54
}
55
56
CPoint CRectangle::getTopRightCorner() const
57
{
58
  // Bitte implementieren und dabei das return-Statement ersetzen.
59
  return CPoint();
60
}
61
62
void CRectangle::setFillChar(char fillChar)
63
{
64
  // Bitte implementieren
65
}
66
67
char CRectangle::getFillChar() const
68
{
69
  // Bitte implementieren und dabei das return-Statement ersetzen.
70
  return 0;
71
}
72
73
bool CRectangle::operator ==(const CRectangle& other) const
74
{
75
  // Bitte implementieren und dabei das return-Statement ersetzen.
76
  return false;
77
}
78
79
void CRectangle::draw(CScreen& screen) const
80
{
81
  // Bitte implementieren
82
}
Description  Resource  Path  Location  Type
make: *** [CRectangle.o] Fehler 1  CRectangle       C/C++ Problem
in expansion of macro ‘x’  CRectangle.cpp  /CRectangle  line 34  C/C++ 
Problem
‘int CPoint::m_x’ is private within this context  CRectangle.cpp 
/CRectangle  line 12  C/C++ Problem
‘m_BottomLeft’ was not declared in this scope  CRectangle.cpp 
/CRectangle  line 11  C/C++ Problem
Field 'x' could not be resolved  CRectangle.cpp  /CRectangle  line 36 
Semantic Error
declared private here  CPoint.h  /CRectangle  line 18  C/C++ Problem
in expansion of macro ‘x’  CRectangle.cpp  /CRectangle  line 36  C/C++ 
Problem
in expansion of macro ‘bottomLeft’  CRectangle.cpp  /CRectangle  line 34 
C/C++ Problem
in expansion of macro ‘y’  CRectangle.cpp  /CRectangle  line 39  C/C++ 
Problem
‘int CPoint::m_y’ is private within this context  CRectangle.cpp 
/CRectangle  line 13  C/C++ Problem
Field 'y' could not be resolved  CRectangle.cpp  /CRectangle  line 41 
Semantic Error
declared private here  CPoint.h  /CRectangle  line 20  C/C++ Problem
in expansion of macro ‘bottomLeft’  CRectangle.cpp  /CRectangle  line 39 
C/C++ Problem
in expansion of macro ‘y’  CRectangle.cpp  /CRectangle  line 41  C/C++ 
Problem
Symbol 'm_BottomLeft' could not be resolved  CRectangle.cpp  /CRectangle 
line 38  Semantic Error
Symbol 'm_BottomLeft' could not be resolved  CRectangle.cpp  /CRectangle 
line 36  Semantic Error
Symbol 'm_BottomLeft' could not be resolved  CRectangle.cpp  /CRectangle 
line 41  Semantic Error
Field 'x' could not be resolved  CRectangle.cpp  /CRectangle  line 38 
Semantic Error
die Regel für Ziel „CRectangle.o“ scheiterte  subdir.mk 
/CRectangle/Debug  line 27  C/C++ Problem
Field 'y' could not be resolved  CRectangle.cpp  /CRectangle  line 43 
Semantic Error
Symbol 'm_BottomLeft' could not be resolved  CRectangle.cpp  /CRectangle 
line 43  Semantic Error
Member 'm_fillChar' was not initialized in this constructor 
CRectangle.cpp  /CRectangle  line 47  Code Analysis Problem

von g4u (Gast)


Lesenswert?

Was benutzt du denn für eine IDE? Eclipse? Dann sind das vielleicht 
einfach nur alte Fehlermeldungen, die du aus dem Fenster löschen kannst. 
Oder du musst mal auf "Rebuild All" klicken.

von rmu (Gast)


Lesenswert?

g4u schrieb:
> Die Defines müssen ganz an den Anfang von CRectangle.cpp, noch
> vor:#include "CRectangle.h"

Das ist Blödsinn. Beheb das Problem, ohne #defines.

von rmu (Gast)


Lesenswert?

Nochwas: bei copy/paste ist nicht nur die Vorlage wichtig, sondern auch 
wo man das dann reinkopiert. Schau mal den Block an in den die 
Fehlermeldung gehört.

von Martin H. (horo)


Lesenswert?

g4u schrieb:
> Da fehlt noch ein
>
1
...
2
#define private public
3
...
> damit der Compiler es frisst.

Aua!

von Nop (Gast)


Lesenswert?

Martin H. schrieb:

> #define private public
> ...> damit der Compiler es frisst.
>
> Aua!

LOL Das ist der Knaller zum Freitag. :_)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

rmu schrieb:
> Das ist Blödsinn. Beheb das Problem, ohne #defines.
Würde ich auch sagen. Lass dich nicht mit "gutgemeinten" aber unsinnigen 
Tipps in die Irre führen.

Überleg mal (dir wird früher oder später sowieso nichts anderes übrig 
bleiben) mit der gallertartigen Substanz zwischen den Ohren, was sowas 
eigentlich macht:
#define private public

von Haarbürste (Gast)


Lesenswert?

Das wichtigste define fehlt! Ohne kann es gar nicht gehen!
1
#define true false

von g4u (Gast)


Lesenswert?

Ich sehe leider gerade, dass sich in meinen Code ein Fehler 
eingeschlichen hat. Statt
1
#define bottomLeft m_BottomLeft
 muss es heißen:
1
#define bottomLeft m_bottomLeft

Hör nicht auf die Trolle, die nur rummeckern, aber nichts konstruktives 
beizutragen haben. Ob mit #define oder ohne ist reine Geschmackssache!

von Hulk H. (hulk23)


Lesenswert?

Tatsächlich sind durch das define die Fehler weg gegangen .

Das kannte ich bisher noch gar nicht .
In der Vorlesung hatten wir das noch nicht gemacht .

Meckert aber noch ein wenig rum ?

Aber wie würde es ohne define gehen ?


1
#include "CRectangle.h"
2
3
#define topRight m_topRight
4
#define bottomLeft m_bottomLeft
5
#define x m_x
6
#define y m_y
7
#define private public
8
CRectangle::CRectangle(char fillChar)
9
10
{
11
  m_fillChar = fillChar;
12
  /**
13
     * Erzeugt ein neues Rechteck mit der angegebenen linken
14
     * unteren und rechten oberen Ecken sowie dem angegebenen
15
     * F�llzeichen.
16
     *
17
     * Beim Erzeugen wird die Zusicherung �berpr�ft, dass die
18
     * rechte obere Ecke rechts von und oberhalt der linken
19
     * unteren Ecke liegen muss! Falls die x-Koordinate
20
     * der rechten oberen Ecke nicht gr��er als die x-Koordinate
21
     * der linken unteren Ecke ist, wird sie auf den Wert
22
     * der x-Koordinate der linken unteren Ecke gesetzt. Falls
23
     * die y-Koordinate der rechten oberen Ecke nicht gr��er als
24
     * die y-Koordinate der linken unteren Ecke ist, wird sie auf
25
     * dem Wert der y-Koordinate der linken unteren Ecke gesetzt.
26
     */
27
  if(topRight.x < bottomLeft.x ){
28
29
    m_topRight.x = bottomLeft.x;
30
  }
31
32
  if(topRight.y < bottomLeft.y){
33
34
    m_topRight.y = bottomLeft.y;
35
  }
36
}
37
38
CRectangle::CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar)
39
{
40
  // Bitte implementieren
41
42
}
43
44
void CRectangle::setCorners(CPoint bottomLeft, CPoint topRight)
45
{
46
  // Bitte implementieren
47
}
48
49
CPoint CRectangle::getBottomLeftCorner() const
50
{
51
  // Bitte implementieren und dabei das return-Statement ersetzen.
52
  return CPoint();
53
}
54
55
CPoint CRectangle::getTopRightCorner() const
56
{
57
  // Bitte implementieren und dabei das return-Statement ersetzen.
58
  return CPoint();
59
}
60
61
void CRectangle::setFillChar(char fillChar)
62
{
63
  // Bitte implementieren
64
}
65
66
char CRectangle::getFillChar() const
67
{
68
  // Bitte implementieren und dabei das return-Statement ersetzen.
69
  return 0;
70
}
71
72
bool CRectangle::operator ==(const CRectangle& other) const
73
{
74
  // Bitte implementieren und dabei das return-Statement ersetzen.
75
  return false;
76
}
77
78
void CRectangle::draw(CScreen& screen) const
79
{
80
  // Bitte implementieren
81
}


Description  Resource  Path  Location  Type
die Regel für Ziel „CRectangle.o“ scheiterte  subdir.mk 
/CRectangle/Debug  line 27  C/C++ Problem
‘int CPoint::m_x’ is private within this context  CRectangle.cpp 
/CRectangle  line 12  C/C++ Problem
declared private here  CPoint.h  /CRectangle  line 18  C/C++ Problem
in expansion of macro ‘x’  CRectangle.cpp  /CRectangle  line 34  C/C++ 
Problem
in expansion of macro ‘bottomLeft’  CRectangle.cpp  /CRectangle  line 34 
C/C++ Problem
‘m_BottomLeft’ was not declared in this scope  CRectangle.cpp 
/CRectangle  line 11  C/C++ Problem
make: *** [CRectangle.o] Fehler 1  CRectangle       C/C++ Problem
‘int CPoint::m_y’ is private within this context  CRectangle.cpp 
/CRectangle  line 13  C/C++ Problem
in expansion of macro ‘x’  CRectangle.cpp  /CRectangle  line 36  C/C++ 
Problem
declared private here  CPoint.h  /CRectangle  line 20  C/C++ Problem
in expansion of macro ‘y’  CRectangle.cpp  /CRectangle  line 39  C/C++ 
Problem
in expansion of macro ‘y’  CRectangle.cpp  /CRectangle  line 41  C/C++ 
Problem
in expansion of macro ‘bottomLeft’  CRectangle.cpp  /CRectangle  line 39 
C/C++ Problem
Member 'm_fillChar' was not initialized in this constructor 
CRectangle.cpp  /CRectangle  line 45  Code Analysis Problem


Das Problem ist das die Leute zwar sagen : Mach es ohne Define .

Aber nicht richtig sagen wie es gehen soll

von Nop (Gast)


Lesenswert?

Hulk H. schrieb:

> Das Problem ist das die Leute zwar sagen : Mach es ohne Define .
> Aber nicht richtig sagen wie es gehen soll

Das Problem ist, daß Du nicht aufgepaßt hast, deswegen mit Deinen 
Hausaufgaben überfordert bist und statt das nachzuholen, was Du schon 
hättest lernen sollen, jetzt in nem Forum Leute fragst, die Deine 
Hausaufgaben machen sollen.

Das bringt Dir nichts, weil Du bei der nächsten Hausaufgabe auch nicht 
weiterkommst, aus denselben Gründen.

von Sven B. (scummos)


Lesenswert?

Diese defines sind völliger Schwachsinn. Lösch die sofort alle wieder.

Lies die Compiler-Fehlermeldung und beheb das Problem ...
Du kannst nicht in deiner rectangle-Klasse auf private Member von Point 
zugreifen, wofür hast du die Setter (setX, setY) gebaut?

von Hulk H. (hulk23)


Lesenswert?

Sven B. schrieb:
> Diese defines sind völliger Schwachsinn. Lösch die sofort alle wieder.
>
> Lies die Compiler-Fehlermeldung und beheb das Problem ...
> Du kannst nicht in deiner rectangle-Klasse auf private Member von Point
> zugreifen, wofür hast du die Setter (setX, setY) gebaut?

Die set Klasse wurde so vorgegeben .

Es handelt sich um keine Hausaufgabe.
Es ist eine Altklausur woran ich übe.

Ich habe auch Cpoint.h in der cpp includiert .
ABer der Fehler geht trotzdem nicht weg?

von Sven B. (scummos)


Lesenswert?

Die Member sind private. Du musst die Setter benutzen. Nicht point.x = 
3, sondern point.setX(3).

von g4u (Gast)


Lesenswert?

Hulk H. schrieb:
> Tatsächlich sind durch das define die Fehler weg gegangen .
>
> Das kannte ich bisher noch gar nicht .
> In der Vorlesung hatten wir das noch nicht gemacht .
>
> Meckert aber noch ein wenig rum ?
>

Die Defines müssen vor das:
1
#include "CRectangle.h
Dann gehen auch die restlichen Fehler weg.

> Das Problem ist das die Leute zwar sagen : Mach es ohne Define .
>
> Aber nicht richtig sagen wie es gehen soll

Ganz genau. Immer nur rummeckern, wenn man mal ein Define benutzt statt 
lange nachzudenken, aber selber sind sie auch zu faul, die Aufgabe zu 
lösen!

von Sven B. (scummos)


Lesenswert?

g4u schrieb:
>> Aber nicht richtig sagen wie es gehen soll
>
> Ganz genau. Immer nur rummeckern, wenn man mal ein Define benutzt statt
> lange nachzudenken, aber selber sind sie auch zu faul, die Aufgabe zu
> lösen!

Ja, bin ich: das ist unnötig komplizierter und schwer lesbarer Code und 
es lohnt sich nicht, darüber nachzudenken, weder für mich noch für den 
TO. Den unnötig kompliziterten Quatsch löschen, dann schauen ob der 
Fehler überhaupt noch da ist, und dann nachdenken ist die einzig 
sinnvolle Strategie.

Also komm, da war selbst das #define private public vom Troll im Code 
verbaut ...

: Bearbeitet durch User
von Hulk H. (hulk23)


Lesenswert?

Da keine brauchbare Hilfe kam ohne define zu machen .

So?

Soll ich diesen Teil in der Cpointh file zu public umwandeln um die 
Fehler zu beseitigen?

class CPoint
{
private:
  /** Die x-Koordinate (Spalte) */
  int m_x;
  /** Die y-Koordinate (Zeile) */
  int m_y;

1
/*
2
 * CRectangle.cpp
3
 *
4
 *  Created on: 05.02.2015
5
 *      Author: lipp
6
 */
7
#define topRight m_topRight
8
#define bottomLeft m_bottomLeft
9
#define x m_x
10
#define y m_y
11
#include "CRectangle.h"
12
13
14
CRectangle::CRectangle(char fillChar)
15
16
{
17
  m_fillChar = fillChar;
18
  /**
19
     * Erzeugt ein neues Rechteck mit der angegebenen linken
20
     * unteren und rechten oberen Ecken sowie dem angegebenen
21
     * F�llzeichen.
22
     *
23
     * Beim Erzeugen wird die Zusicherung �berpr�ft, dass die
24
     * rechte obere Ecke rechts von und oberhalt der linken
25
     * unteren Ecke liegen muss! Falls die x-Koordinate
26
     * der rechten oberen Ecke nicht gr��er als die x-Koordinate
27
     * der linken unteren Ecke ist, wird sie auf den Wert
28
     * der x-Koordinate der linken unteren Ecke gesetzt. Falls
29
     * die y-Koordinate der rechten oberen Ecke nicht gr��er als
30
     * die y-Koordinate der linken unteren Ecke ist, wird sie auf
31
     * dem Wert der y-Koordinate der linken unteren Ecke gesetzt.
32
     */
33
  if(topRight.x < bottomLeft.x ){
34
35
    m_topRight.x = bottomLeft.x;
36
  }
37
38
  if(topRight.y < bottomLeft.y){
39
40
    m_topRight.y = bottomLeft.y;
41
  }
42
}
43
44
CRectangle::CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar)
45
{
46
  // Bitte implementieren
47
48
}
49
50
void CRectangle::setCorners(CPoint bottomLeft, CPoint topRight)
51
{
52
  // Bitte implementieren
53
}
54
55
CPoint CRectangle::getBottomLeftCorner() const
56
{
57
  // Bitte implementieren und dabei das return-Statement ersetzen.
58
  return CPoint();
59
}
60
61
CPoint CRectangle::getTopRightCorner() const
62
{
63
  // Bitte implementieren und dabei das return-Statement ersetzen.
64
  return CPoint();
65
}
66
67
void CRectangle::setFillChar(char fillChar)
68
{
69
  // Bitte implementieren
70
}
71
72
char CRectangle::getFillChar() const
73
{
74
  // Bitte implementieren und dabei das return-Statement ersetzen.
75
  return 0;
76
}
77
78
bool CRectangle::operator ==(const CRectangle& other) const
79
{
80
  // Bitte implementieren und dabei das return-Statement ersetzen.
81
  return false;
82
}
83
84
void CRectangle::draw(CScreen& screen) const
85
{
86
  // Bitte implementieren
87
}

Description  Resource  Path  Location  Type
make: *** [CRectangle.o] Fehler 1  CRectangle       C/C++ Problem
‘int CPoint::m_x’ is private within this context  CRectangle.cpp 
/CRectangle  line 12  C/C++ Problem
Member 'm_fillChar' was not initialized in this constructor 
CRectangle.cpp  /CRectangle  line 44  Code Analysis Problem
declared private here  CPoint.h  /CRectangle  line 18  C/C++ Problem
in expansion of macro ‘x’  CRectangle.cpp  /CRectangle  line 34  C/C++ 
Problem
‘int CPoint::m_y’ is private within this context  CRectangle.cpp 
/CRectangle  line 13  C/C++ Problem
in expansion of macro ‘x’  CRectangle.cpp  /CRectangle  line 36  C/C++ 
Problem
declared private here  CPoint.h  /CRectangle  line 20  C/C++ Problem
in expansion of macro ‘y’  CRectangle.cpp  /CRectangle  line 39  C/C++ 
Problem
in expansion of macro ‘y’  CRectangle.cpp  /CRectangle  line 41  C/C++ 
Problem
die Regel für Ziel „CRectangle.o“ scheiterte  subdir.mk 
/CRectangle/Debug  line 27  C/C++ Problem

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Hulk H. schrieb:
> Da keine brauchbare Hilfe kam ohne define zu machen .

Du könntest Dich auch mal zehn Minuten lang hinsetzen und überlegen, was 
diese #defines da eigentlich anstellen.

Sie kompensieren Deine Schreibfehler, dadurch, daß sie falsch 
geschriebene Variablennamen durch die richtigen ersetzen. Das könntest 
Du auch einfach selber machen, aber ... dazu müsstest Du verstehen, 
worum es bei der ganzen Angelegenheit überhaupt geht.


> Soll ich diesen Teil in der Cpointh file zu public umwandeln um die
> Fehler zu beseitigen?

Nein, Du sollst die Klasse so nutzen, wie es von ihrem Schöpfer 
vorgesehen ist.

Das wurde Dir u.a. hier schon erklärt:

Beitrag "Re: C++ Programmierung"

: Bearbeitet durch User
von g4u (Gast)


Lesenswert?

Sven B. schrieb:
> Also komm, da war selbst das #define private public vom Troll im Code
> verbaut ...

Wieso Troll? Das beseitigt die restlichen Fehlermeldungen ...

Aber mal im Ernst @TE: Die #defines machen einfach nur eine 
Textersetzung von deiner falschen Schreibweise in eine, die zumindest 
keinen Compilerfehler auslöst. Mach diese Ersetzung mal von Hand, ohne 
#define, wie Rufus es vorschlägt.

Falls der Code nach der Ersetzung keinen Sinn ergibt, dann schau mal in 
CRectangle.h nach, was die beiden Konstruktoren unterscheidet und 
welchen du gerade versuchst zu implementieren.

von jz23 (Gast)


Lesenswert?

Lies ein Buch, beschäftige dich vernünftig damit und beheb die Fehler - 
der Compiler gibt dir genug Hinweise.

Wird das nix, dann studier was anderes. Und ja, das meine ich absolut 
ernst.

von Sven B. (scummos)


Lesenswert?

g4u schrieb:
> Sven B. schrieb:
>> Also komm, da war selbst das #define private public vom Troll im Code
>> verbaut ...
>
> Wieso Troll? Das beseitigt die restlichen Fehlermeldungen ...

Weil "die Fehlermeldung geht dadurch weg" eine Programmierpraxis ist, 
die jeder auch nur halbwegs ernstzunehmende Softwareentwickler in den 
ersten fünf Minuten seiner Ausbildung ablegen sollte.

von Hulk H. (hulk23)


Lesenswert?

Aber wo ist die Hilfe geblieben von euch ?

Es wurde eine frage gestellt , aber was von den meinsten kam ,waren nur 
Beleidigungen ?
Was soll das ?

Beitrag #5129757 wurde von einem Moderator gelöscht.
von nicht"Gast" (Gast)


Lesenswert?

Hulk H. schrieb:
> Aber wo ist die Hilfe geblieben von euch ?

Puh, ernsthafte Hilfe lautet in deinem Fall leider wieder einmal.
Arbeite dein Script durch. Du machst Grundlagenfehler.

Eine Hilfe in anderer Form kann nur bedeuten, dir die Klasse zu 
korrigieren. Dabei lernst du nur nichts.

Weder deine Aufgabe ist anspruchsvoll, noch die Lösung dazu.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Hulk H. schrieb:
> Aber wo ist die Hilfe geblieben von euch ?

Neben dem Getrolle kamen ziemlich viele hilfreiche Hinweise.

Nein, keiner hat Dich an die Hand genommen, Dir ein Lätzchen umgebunden 
und dich Löffel für Löffel mit der nötigen Erkenntnis gefüttert -- aber 
die relevanten Hinweise sind alle gegeben worden.

Sogar der "#define-Troll" hat zu erkennen gegeben, was er mit seiner 
"Trollerei" vorhatte (er wurde nur recht gründlich missverstanden).

Beitrag #5130163 wurde von einem Moderator gelöscht.
Beitrag #5130175 wurde von einem Moderator gelöscht.
Beitrag #5130197 wurde von einem Moderator gelöscht.
Beitrag #5130209 wurde von einem Moderator gelöscht.
Beitrag #5130218 wurde von einem Moderator gelöscht.
von PittyJ (Gast)


Lesenswert?

Also ich habe damals angefangen, dass ich mir ein Buch gekauft habe.
Kernighan/Ritchie bzw Stroustrup.

Dann legt man los und implementiert die Beispiele nach. Angefangen mit 
den 3-Zeilern bis zu komplexerem Code. Dabei lernt man die Element der 
Sprache kennen. Aber auch den Compiler. Man lernt, welche Fehler in 
welcher Fehlermeldung münden, und wo man dann suchen muss.
z.B. steht am Anfang einer Fehlermeldung immer eine Zeilennummer.

Ich denke, dieses Vorgehen würde immer noch Sinn machen: erst mal mit 
kleinen Programmen anfangen und sich ein bisschen mit dem Compiler 
beschäftigen.

Alles das benötigt natürlich eine gewisse Zeit. Am K/R habe ich eine 
ganze Weile gesessen. Und auch virtelle Funktionen und Templetes haben 
sich erst nach langer Zeit für mich voll erschlossen. Bis dahin ist viel 
üben angesagt.

von Hulk H. (hulk23)


Lesenswert?

1
* CRectangle.cpp
2
 *
3
 *  Created on: 05.02.2015
4
 *      
5
 */
6
7
#include "CRectangle.h"
8
9
CRectangle::CRectangle(char fillChar)
10
11
{
12
  m_fillChar = fillChar;
13
  /**
14
     * Erzeugt ein neues Rechteck mit der angegebenen linken
15
     * unteren und rechten oberen Ecken sowie dem angegebenen
16
     * F�llzeichen.
17
     *
18
     * Beim Erzeugen wird die Zusicherung �berpr�ft, dass die
19
     * rechte obere Ecke rechts von und oberhalt der linken
20
     * unteren Ecke liegen muss! Falls die x-Koordinate
21
     * der rechten oberen Ecke nicht gr��er als die x-Koordinate
22
     * der linken unteren Ecke ist, wird sie auf den Wert
23
     * der x-Koordinate der linken unteren Ecke gesetzt. Falls
24
     * die y-Koordinate der rechten oberen Ecke nicht gr��er als
25
     * die y-Koordinate der linken unteren Ecke ist, wird sie auf
26
     * dem Wert der y-Koordinate der linken unteren Ecke gesetzt.
27
     */
28
29
}
30
31
CRectangle::CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar)
32
{
33
   if(topRight.x < bottomLeft.x ){
34
35
      m_topRight.x = bottomLeft.x;
36
    }
37
38
    if(topRight.y < bottomLeft.y){
39
40
      m_topRight.y = bottomLeft.y;
41
    }
42
}
43
44
void CRectangle::setCorners(CPoint bottomLeft, CPoint topRight)
45
{
46
  // Bitte implementieren
47
}
48
49
CPoint CRectangle::getBottomLeftCorner() const
50
{
51
  // Bitte implementieren und dabei das return-Statement ersetzen.
52
  return CPoint();
53
}
54
55
CPoint CRectangle::getTopRightCorner() const
56
{
57
  // Bitte implementieren und dabei das return-Statement ersetzen.
58
  return CPoint();
59
}
60
61
void CRectangle::setFillChar(char fillChar)
62
{
63
  // Bitte implementieren
64
}
65
66
char CRectangle::getFillChar() const
67
{
68
  // Bitte implementieren und dabei das return-Statement ersetzen.
69
  return 0;
70
}
71
72
bool CRectangle::operator ==(const CRectangle& other) const
73
{
74
  // Bitte implementieren und dabei das return-Statement ersetzen.
75
  return false;
76
}
77
78
void CRectangle::draw(CScreen& screen) const
79
{
80
  // Bitte implementieren
81
}

Description  Resource  Path  Location  Type
make: *** [CRectangle.o] Fehler 1  CRectangle       C/C++ Problem
‘class CPoint’ has no member named ‘x’  CRectangle.cpp  /CRectangle 
line 34  C/C++ Problem
‘class CPoint’ has no member named ‘y’  CRectangle.cpp  /CRectangle 
line 39  C/C++ Problem
‘class CPoint’ has no member named ‘x’  CRectangle.cpp  /CRectangle 
line 36  C/C++ Problem
‘class CPoint’ has no member named ‘y’  CRectangle.cpp  /CRectangle 
line 41  C/C++ Problem
die Regel für Ziel „CRectangle.o“ scheiterte  subdir.mk 
/CRectangle/Debug  line 27  C/C++ Problem
Field 'x' could not be resolved  CRectangle.cpp  /CRectangle  line 34 
Semantic Error
Field 'x' could not be resolved  CRectangle.cpp  /CRectangle  line 36 
Semantic Error
Field 'x' could not be resolved  CRectangle.cpp  /CRectangle  line 34 
Semantic Error
Member 'm_fillChar' was not initialized in this constructor 
CRectangle.cpp  /CRectangle  line 32  Code Analysis Problem
Field 'y' could not be resolved  CRectangle.cpp  /CRectangle  line 39 
Semantic Error
Field 'x' could not be resolved  CRectangle.cpp  /CRectangle  line 36 
Semantic Error
Field 'y' could not be resolved  CRectangle.cpp  /CRectangle  line 41 
Semantic Error
Field 'y' could not be resolved  CRectangle.cpp  /CRectangle  line 39 
Semantic Error
Field 'y' could not be resolved  CRectangle.cpp  /CRectangle  line 41 
Semantic Error



Zu viele Fehler Mist

von guest (Gast)


Lesenswert?

Naja, die Fehlermeldung is ja wohl recht eindeutig:
1
‘class CPoint’ has no member named ‘x’
Zumal da dann auch noch steht, über welche Zeile der Compiler stolpert 
(Hint: 34).

von Hulk H. (hulk23)


Lesenswert?

Kann man das nicht so mit .x benutzen ?
Wie soll man es sonst machen?

von Kaj (Gast)


Lesenswert?

Hulk H. schrieb:
> class CPoint
> {
> private:
>   /** Die x-Koordinate (Spalte) */
>   int m_x;
>   /** Die y-Koordinate (Zeile) */
>   int m_y;

Hulk H. schrieb:
> Kann man das nicht so mit .x benutzen ?
> Wie soll man es sonst machen?
1. CPoint hat kein At­tri­but mit dem Bezeichner x bzw. y. Die heissen 
m_x bzw. m_y

2. Nein, da kannst du ausserhalb von CPoint nicht einfach mit .m_x bzw. 
.m_y drauf zugreifen, denn die beiden At­tri­but sind private.

von Kaj (Gast)


Lesenswert?

Hulk H. schrieb:
> Wie soll man es sonst machen?
Ueber entsprechende Methoden (getter/setter) die den Zugriff regeln.

von Hulk H. (hulk23)


Lesenswert?

1
CRectangle::CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar)
2
{
3
   if(topRight.setX() < bottomLeft.setX() ){
4
5
      m_topRight.setX() = bottomLeft.setX();
6
    }
7
8
    if(topRight.setY() < bottomLeft.setY()){
9
10
      m_topRight.setY() = bottomLeft.setY();
11
    }
12
}


Scheint aber auch nicht zu helfen ?

von Sheeva P. (sheevaplug)


Lesenswert?

Hulk H. schrieb:
>
1
> CRectangle::CRectangle(CPoint bottomLeft, CPoint topRight, char 
2
> fillChar)
3
> {
4
>    if(topRight.setX() < bottomLeft.setX() ){
5
> 
6
>       m_topRight.setX() = bottomLeft.setX();
7
>     }
8
> 
9
>     if(topRight.setY() < bottomLeft.setY()){
10
> 
11
>       m_topRight.setY() = bottomLeft.setY();
12
>     }
13
> }
>
> Scheint aber auch nicht zu helfen ?

Das englische Wort "to set" heißt soviel wie "setzen". Eine 
Setter-Methode setX() setzt also einen Wert, vermutlich den der 
Variable "x". Du willst Deine Daten in den if-Abfragen aber nicht 
setzen, sondern? Genau. Und eine Setter-Funktion erwartet üblicherweise 
auch keine Zuweisung, sondern die Übergabe eines Parameters.

Die erste If-Abfrage würde also etwa lauten:
1
if(topRight.getX() < bottomLeft.getX() {
2
    m_topRight.setX( bottomLeft.getX() );
3
}

von Hulk H. (hulk23)


Lesenswert?

1
#include "CRectangle.h"
2
#include "CPoint.h"
3
CRectangle::CRectangle(char fillChar)
4
5
{
6
  m_fillChar = fillChar;
7
  /**
8
     * Erzeugt ein neues Rechteck mit der angegebenen linken
9
     * unteren und rechten oberen Ecken sowie dem angegebenen
10
     * F�llzeichen.
11
     *
12
     * Beim Erzeugen wird die Zusicherung �berpr�ft, dass die
13
     * rechte obere Ecke rechts von und oberhalt der linken
14
     * unteren Ecke liegen muss! Falls die x-Koordinate
15
     * der rechten oberen Ecke nicht gr��er als die x-Koordinate
16
     * der linken unteren Ecke ist, wird sie auf den Wert
17
     * der x-Koordinate der linken unteren Ecke gesetzt. Falls
18
     * die y-Koordinate der rechten oberen Ecke nicht gr��er als
19
     * die y-Koordinate der linken unteren Ecke ist, wird sie auf
20
     * dem Wert der y-Koordinate der linken unteren Ecke gesetzt.
21
     */
22
23
}
24
25
CRectangle::CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar)
26
{
27
  m_fillChar = fillChar;
28
  
29
   if(topRight.getX() < bottomLeft.getX() ){
30
31
      m_topRight.setX(bottomLeft.getX());
32
    }
33
34
    if(topRight.getY() < bottomLeft.getY()){
35
36
      m_topRight.setY(bottomLeft.getY());
37
    }
38
}
39
40
void CRectangle::setCorners(CPoint bottomLeft, CPoint topRight)
41
{
42
  // Bitte implementieren
43
}
44
45
CPoint CRectangle::getBottomLeftCorner() const
46
{
47
  // Bitte implementieren und dabei das return-Statement ersetzen.
48
  return CPoint();
49
}
50
51
CPoint CRectangle::getTopRightCorner() const
52
{
53
  // Bitte implementieren und dabei das return-Statement ersetzen.
54
  return CPoint();
55
}
56
57
void CRectangle::setFillChar(char fillChar)
58
{
59
  // Bitte implementieren
60
}
61
62
char CRectangle::getFillChar() const
63
{
64
  // Bitte implementieren und dabei das return-Statement ersetzen.
65
  return 0;
66
}
67
68
bool CRectangle::operator ==(const CRectangle& other) const
69
{
70
  // Bitte implementieren und dabei das return-Statement ersetzen.
71
  return false;
72
}
73
74
void CRectangle::draw(CScreen& screen) const
75
{
76
  // Bitte implementieren
77
}

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

von Ichhoffedertrollt (Gast)


Lesenswert?

Kannst du Englisch?
Da steht Klipp und klar dein setirgendwas erwartet ein Argument, aber du 
bist zu unfähig das zu liefern.
Änder was daran und du und der Compiler werden irgendwann Freunde.

von Nop (Gast)


Lesenswert?

Hulk H. schrieb:

> Eclipse meckert auch nur rum.

Mit der Einstellung wird das nie was, weil Du Fehlermeldungen nur als 
lästiges Generve siehst, aber nicht einmal den Versuch unternimmst, zu 
begreifen, was sie Dir sagen wollen und was Du daher tun mußt.

Wenn Du an Deiner Einstellung nicht ganz grundlegend was änderst, wirst 
Du diesen Kurs nicht bestehen.

von Hulk H. (hulk23)


Lesenswert?

1
CRectangle::CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar)
2
{
3
  m_fillChar = fillChar;
4
  
5
   if(topRight.CPoint::getX() < bottomLeft.CPoint::getX() ){
6
7
      m_topRight.CPoint::setX(bottomLeft.getX());
8
    }
9
10
    if(topRight.CPoint::getY() < bottomLeft.CPoint::getY()){
11
12
      m_topRight.CPoint::setY(bottomLeft.CPoint::getY());
13
    }
14
}

Hilft auch  net ?

von Nop (Gast)


Lesenswert?

Hulk H. schrieb:

> Hilft auch  net ?

Nein, wahllos m_ irgendwo dranzuklatschen hilft nicht.

von Ichhoffedertrollt (Gast)


Lesenswert?

Vorher war auch besser. Hast du den Code denn Mal versucht zu 
kompilieren?

Beitrag #5133055 wurde von einem Moderator gelöscht.
von PittyJ (Gast)


Lesenswert?

https://www.amazon.de/Programmiersprache-Deutsche-%C3%9Cbersetzung-Special-Programmers/dp/382731660X/ref=la_B000AQ349S_1_2?s=books&ie=UTF8&qid=1504588947&sr=1-2

In dem Buch sind sämtliche Antworten enthalten.
1000 Seiten für 4 Euro sind ein Schnäppchen, das sollte sich jeder 
leisten können.
Lesen und lernen. Und am besten erst einmal mit einem 3-Zeiler beginnen.

Beitrag #5133134 wurde von einem Moderator gelöscht.
von Hulk H. (hulk23)


Lesenswert?

Jetzt klappt es ohne Fehlermeldung .

Kann ich die Zuweisung so vor der If Bedingung machen ?

m_fillChar = fillChar;
m_bottomLeft = bottomLeft;
m_topRight = topRight;
1
* CRectangle.cpp
2
 *
3
 *  Created on: 05.02.2015
4
 *      Author: lipp
5
 */
6
7
#include "CRectangle.h"
8
#include "CPoint.h"
9
CRectangle::CRectangle(char fillChar)
10
11
{
12
  m_fillChar = fillChar;
13
  /**
14
     * Erzeugt ein neues Rechteck mit der angegebenen linken
15
     * unteren und rechten oberen Ecken sowie dem angegebenen
16
     * F�llzeichen.
17
     *
18
     * Beim Erzeugen wird die Zusicherung �berpr�ft, dass die
19
     * rechte obere Ecke rechts von und oberhalt der linken
20
     * unteren Ecke liegen muss! Falls die x-Koordinate
21
     * der rechten oberen Ecke nicht gr��er als die x-Koordinate
22
     * der linken unteren Ecke ist, wird sie auf den Wert
23
     * der x-Koordinate der linken unteren Ecke gesetzt. Falls
24
     * die y-Koordinate der rechten oberen Ecke nicht gr��er als
25
     * die y-Koordinate der linken unteren Ecke ist, wird sie auf
26
     * dem Wert der y-Koordinate der linken unteren Ecke gesetzt.
27
     */
28
29
}
30
31
CRectangle::CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar)
32
{
33
  m_fillChar = fillChar;
34
  m_bottomLeft = bottomLeft;
35
  m_topRight = topRight;
36
37
   if(topRight.getX() < bottomLeft.getX() ){
38
39
      m_topRight.CPoint::setX(bottomLeft.getX());
40
    }
41
42
    if(topRight.getY() < bottomLeft.getY()){
43
44
      m_topRight.setY(bottomLeft.getY());
45
    }
46
}
47
48
void CRectangle::setCorners(CPoint bottomLeft, CPoint topRight)
49
{
50
  // Bitte implementieren
51
}
52
53
CPoint CRectangle::getBottomLeftCorner() const
54
{
55
  // Bitte implementieren und dabei das return-Statement ersetzen.
56
  return CPoint();
57
}
58
59
CPoint CRectangle::getTopRightCorner() const
60
{
61
  // Bitte implementieren und dabei das return-Statement ersetzen.
62
  return CPoint();
63
}
64
65
void CRectangle::setFillChar(char fillChar)
66
{
67
  // Bitte implementieren
68
}
69
70
char CRectangle::getFillChar() const
71
{
72
  // Bitte implementieren und dabei das return-Statement ersetzen.
73
  return 0;
74
}
75
76
bool CRectangle::operator ==(const CRectangle& other) const
77
{
78
  // Bitte implementieren und dabei das return-Statement ersetzen.
79
  return false;
80
}
81
82
void CRectangle::draw(CScreen& screen) const
83
{
84
  // Bitte implementieren
85
}

: Bearbeitet durch User
von Hulk H. (hulk23)


Lesenswert?

Passen auch die getter und setter Methoden ?

1
/*
2
 * CRectangle.cpp
3
 *
4
 *  Created on: 05.02.2015
5
 *      Author: lipp
6
 */
7
8
#include "CRectangle.h"
9
#include "CPoint.h"
10
CRectangle::CRectangle(char fillChar)
11
12
{
13
  m_fillChar = fillChar;
14
  /**
15
     * Erzeugt ein neues Rechteck mit der angegebenen linken
16
     * unteren und rechten oberen Ecken sowie dem angegebenen
17
     * F�llzeichen.
18
     *
19
     * Beim Erzeugen wird die Zusicherung �berpr�ft, dass die
20
     * rechte obere Ecke rechts von und oberhalt der linken
21
     * unteren Ecke liegen muss! Falls die x-Koordinate
22
     * der rechten oberen Ecke nicht gr��er als die x-Koordinate
23
     * der linken unteren Ecke ist, wird sie auf den Wert
24
     * der x-Koordinate der linken unteren Ecke gesetzt. Falls
25
     * die y-Koordinate der rechten oberen Ecke nicht gr��er als
26
     * die y-Koordinate der linken unteren Ecke ist, wird sie auf
27
     * dem Wert der y-Koordinate der linken unteren Ecke gesetzt.
28
     */
29
30
}
31
32
CRectangle::CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar)
33
{
34
  m_fillChar = fillChar;
35
  m_bottomLeft = bottomLeft;
36
  m_topRight = topRight;
37
38
   if(topRight.getX() < bottomLeft.getX() ){
39
40
      m_topRight.CPoint::setX(bottomLeft.getX());
41
    }
42
43
    if(topRight.getY() < bottomLeft.getY()){
44
45
      m_topRight.setY(bottomLeft.getY());
46
    }
47
}
48
49
50
void CRectangle::setCorners(CPoint bottomLeft, CPoint topRight)
51
{
52
  if(topRight.getX()> bottomLeft.getX() && topRight.getY()> bottomLeft.getY()){
53
    
54
    m_bottomLeft = bottomLeft;
55
    m_topRight = topRight;
56
  }
57
}
58
59
CPoint CRectangle::getBottomLeftCorner() const
60
{
61
  // Bitte implementieren und dabei das return-Statement ersetzen.
62
  return m_bottomLeft;
63
}
64
65
CPoint CRectangle::getTopRightCorner() const
66
{
67
  // Bitte implementieren und dabei das return-Statement ersetzen.
68
  return m_topRight;
69
}
70
71
void CRectangle::setFillChar(char fillChar)
72
{
73
  // Bitte implementieren
74
  m_fillChar = fillChar;
75
}
76
77
char CRectangle::getFillChar() const
78
{
79
  // Bitte implementieren und dabei das return-Statement ersetzen.
80
  return m_fillChar;
81
}
82
83
bool CRectangle::operator ==(const CRectangle& other) const
84
{
85
  // Bitte implementieren und dabei das return-Statement ersetzen.
86
  return false;
87
}
88
89
void CRectangle::draw(CScreen& screen) const
90
{
91
  // Bitte implementieren
92
}

von nicht"Gast" (Gast)


Lesenswert?

Ja, das kann man so machen.

Zu deiner Abfrage. Wäre es nicht sinvoller topright und botleft zu 
tauschen, wenn die Bedingungen erfüllt sind? Zur Zweit veränderst du ja 
dann einfach die Geometrie deines Rechteckes. Das ist kein schönes 
Verhalten.


PS: Wie bescheuert ist dass denn. Das ist das erste mal, dass ich lese, 
das die Ecken unten links und oben rechts angegeben werden. Na ja, 
hauptsache anders. Manche Leute halt...... (das war nichts gegen den TE. 
Der sagt, ja dass das ein Script ist.)

Wenn das ein eh nur eine Übung ist, solltest du eine Startposition 
angeben und eine Spanne, wie groß das Rechteck ist. Dann bist du von der 
Lage des Koordinatensystems unabhängig.

Das ist gar nicht mal so theoretisch. Das kartesische Koordinatensystem 
hat seinen 0Punkt im ersten Quadranten ja unten links. Das 
Koordinatensystem beim Zeichen auf dem Monitor hat seinen Nullpunkt oben 
links und geht positiv nach "unten".

von Hulk (Gast)


Lesenswert?

Warum soll man botLeft und topRight tauschen ?

In der Aufgabe steht es doch so oder nicht ?

von Martin H. (horo)


Lesenswert?

nicht"Gast" schrieb:
> Das ist das erste mal, dass ich lese,
> das die Ecken unten links und oben rechts angegeben werden. Na ja,
> hauptsache anders. Manche Leute halt......

So machts zum Beispiel auch Adobe - PostScript hat den Ursprung unten 
links.

Ciao, Martin

Beitrag #5133394 wurde von einem Moderator gelöscht.
von nicht"Gast" (Gast)


Lesenswert?

Hulk schrieb:
> Warum soll man botLeft und topRight tauschen ?

Im Grunde finde ich beides nicht schön. Der TE schaut ja, ob die Ecken 
auch da sind, wo sie laut Namen sein sollten. Wenn das nicht der Fall 
ist, verändert er die Geometrie des Rechtecks. Das ist eigentlich nicht 
so schön, weil man da ne Weile nach Fehlern suchen kann.

Da ist die Kombination Position/Größe um einiges schöner.

von nicht"Gast" (Gast)


Lesenswert?

Martin H. schrieb:
> nicht"Gast" schrieb:
>> Das ist das erste mal, dass ich lese,
>> das die Ecken unten links und oben rechts angegeben werden. Na ja,
>> hauptsache anders. Manche Leute halt......
>
> So machts zum Beispiel auch Adobe - PostScript hat den Ursprung unten
> links.

richtig, aber nicht nach der Nummer "Ecke rechts unten"/"Ecke links 
oben" sondern auch nach Größe/Endpunkt. Wo sich dann letzten Endes der 
Bezugpunkt befindet ist Egal.

Mal aus der Seite Kopiert, bei der ich nachgeschaut habe:
x y w h rectstroke draw a rectangle of width w, height h, and lower left 
endpoint (x,y).

Die Seite:
https://www.cs.duke.edu/courses/fall03/cps100/assign/recursivegraph/postscript-help.htm

von Hulk H. (hulk23)


Angehängte Dateien:

Lesenswert?

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?
1
ostream& operator<< (ostream& lhs, const CRectangle& rhs){
2
  rhs.CRectangle(bottomLeft(getX(),getY()),topRight(getX(),getY()), fillChar);
3
  
4
  
5
}

: Bearbeitet durch User
von Hulk H. (hulk23)


Lesenswert?

Oder soll ich beim Operator einfach mittels lhs << ..... ausgeben ?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Was wäre davon zu halten, wenn Du im Unterricht etwas aufmerksamer 
wärst, und Deine Fragen Deinem Lehrer stellst?

Dieses Forum dient nicht der Nachhilfe, und schon gar nicht dem Lösen 
von Hausaufgaben.

Im übrigen plenkst Du.

von Hulk H. (hulk23)


Lesenswert?

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.
1
ostream& operator<< (ostream& lhs, const CRectangle& rhs){
2
  lhs << (rhs.bottomLeft(CPoint.getX(),CPoint.getY())<< (rhs.topRight(CPoint.getX(),CPoint.getY())<< rhs.fillChar << endl;
3
4
return lhs;
5
}

von rmu (Gast)


Lesenswert?

Hulk H. schrieb:
> 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.

Man braucht zum Programmieren eine gewisse Struktur beim Denken. Einfach 
irgendwas zusammengemurxtes hinschreiben bringts nicht. Vor allem ist es 
notwendig, eine Zeile von dem C++ Code mental analysieren und in 
einzelne Komponenten ("Statements", "Ausdrücke", ...) zerlegen zu 
können, und auch den globalen Kontext der Zeile zu behirnen, also z.B. 
ob die Zeile Teil einer Methoden- oder Funktionsdefinition ist, oder was 
auch immer.

Unter dieser Voraussetzung würde ich zuallererst mal rausfinden, wozu 
dieses "operator<<" überhaupt gut sein soll, d.h. was das genau tut und 
wie es verwendet wird. Dazu ein kleines Testprogramm schreiben, wird 
sowieso in der nächsten Aufgabenstellung fällig.

Sobald das mal läuft lässt sich dann auch (leicht) verifizieren, ob der 
Effekt von "<<" den Vorgaben der Angabe entspricht. Man kann dann auch 
vernünftigere Fragen stellen so à la "wenn ich ZYX mache erwarte ich 
ABC, aber es passiert ABc, was übersehe ich", die lassen sich 
vernünftiger beantworten.

von Hulk H. (hulk23)


Lesenswert?

Vor allem beim letzten Teil mit fillchar bin ich mir nicht sicher ?
1
ostream& operator<< (ostream& lhs, const CRectangle& rhs){
2
  lhs << "CRectangle[(" << rhs.getBottomLeftCorner().getX() << "," << " " << rhs.getBottomLeftCorner().getY() << ")" << "," << "(" << rhs.getTopRightCorner().getX() << " , "<< rhs.getTopRightCorner().getY()<< " )"<< ","<< rhs.getFillChar()<< endl;
3
4
return lhs;
5
}

von nicht"Gast" (Gast)


Lesenswert?

Irgend wie hab ich das Gefühl. du schreibst irgend einen Käse hin und 
hoffst, dass es einer korrigiert.


So langsam hab denk ich das.....

hier für dich
1
                       /|
2
                      / |
3
                     /\ |  /|
4
                    /6 \| / |
5
                   /    \/  |
6
                   >    /\ <
7
                   \   /  \ |
8
                    \ /|   \|
9
                     \ |
10
                      \|

von Nop (Gast)


Lesenswert?

Hulk H. schrieb:

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

Im Unterricht aufpassen und den Lehrer fragen. Oder Dir Nachhilfe 
suchen. Du kannst beispielsweise im Forum nachfragen, ob es einen 
C++-Programmierer gibt, der Dir Nachhilfe gibt. Gegen Geld, oder Du 
könntest ihm dafür die Gartenarbeit erledigen.

Oder natürlich die Triviallösung: bei dem Kurs einfach durchfallen. 
Sollte dieser Kurs unbedingt notwendig sein, dann such Dir eine 
Richtung, bei der Du so einen Kurs nicht hast.

Aber nicht sich die Hausaufgaben per Forum erledigen lassen.

von Hulk H. (hulk23)


Lesenswert?

Es handelt sich um keine Hausaufgabe

Beitrag #5135067 wurde von einem Moderator gelöscht.
Beitrag #5135127 wurde von einem Moderator gelöscht.
Beitrag #5135131 wurde von einem Moderator gelöscht.
Beitrag #5135171 wurde von einem Moderator gelöscht.
Beitrag #5135183 wurde von einem Moderator gelöscht.
Beitrag #5135190 wurde von einem Moderator gelöscht.
Beitrag #5135191 wurde von einem Moderator gelöscht.
Beitrag #5135204 wurde von einem Moderator gelöscht.
von rmu (Gast)


Lesenswert?

Hulk H. schrieb:
> Vor allem beim letzten Teil mit fillchar bin ich mir nicht sicher ?

inwiefern kann man sich da unsicher sein? ausprobieren! es wird nichts 
kaputt. vermutlich fehlt aber noch ein paar '

von PittyJ (Gast)


Lesenswert?

Auch mit der Gefahr, dass mich die Moderatoren wieder löschen:

Lass das Programmieren sein! Es ist nicht deine Welt.

Ein Programmierer muss die Handbücher lesen.
Ein Programmierer mit die Compiler-Antworten verstehen und 
interpretieren.
Ein Programmierer muss auch sein Programm debuggen, sei es mit printf 
oder einem Debugger.
Ein Programmierer spielt auch mal mit dem Programm herum, Guckt was 
passiert wenn er Sturkturen, Klassen verändert, bis es besser passt.

Alles Dinge, die du nicht kannst oder willst.
Man kann doch nicht jede Codezeile hier noch von jemand anderen 
analysieren lassen, ohne bereit zu sein, sich selber um die Basics zu 
kümmern.

An die Moderatoren: schließt endlich diesen gesamten Thread. Sonst wird 
uns der TE noch Jahre mit seinen Rechtecken quälen.

von rmu (Gast)


Lesenswert?

PittyJ schrieb:
> Lass das Programmieren sein! Es ist nicht deine Welt.
>
> Ein Programmierer muss die Handbücher lesen.
> Ein Programmierer mit die Compiler-Antworten verstehen und
> interpretieren.
> Ein Programmierer muss auch sein Programm debuggen, sei es mit printf
> oder einem Debugger.
> Ein Programmierer spielt auch mal mit dem Programm herum, Guckt was
> passiert wenn er Sturkturen, Klassen verändert, bis es besser passt.
>
> Alles Dinge, die du nicht kannst oder willst.
> Man kann doch nicht jede Codezeile hier noch von jemand anderen
> analysieren lassen, ohne bereit zu sein, sich selber um die Basics zu
> kümmern.

Rom ist nicht an einem Tag erbaut worden. Am Anfang steht jeder 
erschlagen da und muss sich erst mal zurechtfinden was wo wie wichtig 
ist und zusammenhängt. "Herumspielen" und "Handbücher lesen" macht man 
nicht eben so in 2h.

Beitrag #5135444 wurde von einem Moderator gelöscht.
Beitrag #5135463 wurde von einem Moderator gelöscht.
von Hulk H. (hulk23)


Lesenswert?

1
////////////////////////////////////////////////////////////////////////////////
2
// Header-Dateien
3
#include <iostream>    // Header f�r die Standard-IO-Objekte (z.B. cout, cin)
4
#include <stdlib.h>
5
// TODO: F�gen Sie hier weitere ben�tigte Header-Dateien der
6
// Standard-Bibliothek ein z.B.
7
// #include <string>
8
9
using namespace std;  // Erspart den scope vor Objekte der
10
            // C++-Standard-Bibliothek zu schreiben
11
            // z.B. statt "std::cout" kann man "cout" schreiben
12
13
// Inkludieren Sie hier die Header-Files Ihrer Klassen, z.B.
14
// #include "CFraction.h"
15
#include "CPoint.h"
16
#include "CRectangle.h"
17
#include "CScreen.h"
18
19
20
// Hauptprogramm
21
// Dient als Testrahmen, von hier aus werden die Klassen aufgerufen
22
int main (void)
23
{
24
    // TODO: Tragen Sie hier Ihren Namen, die Matrikelnummer und die Rechnernummer ein
25
  cout << "Name:, Matrikelnummer: <Matrikelnummer>" << endl << endl;
26
  
27
  CRectangle rectangle1.getBottomLeftCorner().getX(5).getY(5);
28
  CRectangle rectangle1.getTopRightCorner().getX(25).getY(15);
29
  CRectangle rectangle.getFillChar(fillChar);
30
31
  return 0;
32
}

Gut bin jetzt ein wenig weiter gegangen mit meiner Aufgabe .

Bin jetzt gerade beim testen .


Wie soll ich das mit operator << ausgeben ?

Das Rechteck irgendwie mit this ausgeben ?

Wenn ich an manchen Stellen nicht weiter komme ,muss ich ja irgendwo 
nachfragen oder ?

Man lernt ja programmieren durch proggen .

Nur durch Bücher wird es ja auch nicht besser.

Ich habe auch Bücher gelesen aber bei der Anwendung habe ich trotzdem 
Probleme.

Wenn man an Stellen nicht weiter kommt und nachfragt , lernt man ja 
auch.

Wenn mir jemand im Forum hier es mir erklärt wie es funzt dann verstehe 
ich es doch auch gleichzeitig .

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Hulk H. schrieb:
> Wenn ich an manchen Stellen nicht weiter komme ,muss ich ja irgendwo
> nachfragen oder ?

Ja. Aber nicht hier, sondern bei Deinem Lehrer.

> Man lernt ja programmieren durch proggen .

Nein. Dadurch lernt man es nicht.


Du plenkst übrigens immer schlimmer.

Beitrag #5136125 wurde von einem Moderator gelöscht.
von Hulk H. (hulk23)


Lesenswert?

// GIT-Labor
// main.h

//////////////////////////////////////////////////////////////////////// 
////////
// 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




1
// Inkludieren Sie hier die Header-Files Ihrer Klassen, z.B.
2
// #include "CFraction.h"
3
#include "CPoint.h"
4
#include "CRectangle.h"
5
#include "CScreen.h"
6
7
8
// Hauptprogramm
9
// Dient als Testrahmen, von hier aus werden die Klassen aufgerufen
10
int main (void)
11
{
12
    // TODO: Tragen Sie hier Ihren Namen, die Matrikelnummer und die Rechnernummer ein
13
  cout << "Name:, Matrikelnummer: <Matrikelnummer>" << endl << endl;
14
15
  CRectangle rectangle1.getBottomLeftCorner().getX(5).getY(5);
16
  CRectangle rectangle2.getTopRightCorner().getX(25).getY(15);
17
  CRectangle rectangle3.getFillChar();
18
  
19
  cout <<  rectangle1 <<  " , " <<  rectangle2 << "," << rectangle3 
20
  
21
22
  return 0;
23
}

Ich verstehe nicht warum eclipse dauernd meckert Mist?

Description Resource Path Location Type
make: *** [main.o] Fehler 1 CRectangle C/C++ Problem
expected initializer before ‘.’ token main.cpp /CRectangle line 30 C/C++ 
Problem
expected initializer before ‘.’ token main.cpp /CRectangle line 31 C/C++ 
Problem
stray ‘\302’ in program main.cpp /CRectangle line 32 C/C++ Problem
stray ‘\264’ in program main.cpp /CRectangle line 32 C/C++ Problem
die Regel für Ziel „main.o“ scheiterte subdir.mk /CRectangle/Debug line 
27 C/C++ Problem
expected initializer before ‘.’ token main.cpp /CRectangle line 32 C/C++ 
Problem

Beitrag #5136146 wurde von einem Moderator gelöscht.
von rmu (Gast)


Lesenswert?

Bei solchen Programmen kommt es wirklich auf jedes einzelne Zeichen an. 
Irgendwo ein falschen Buchstabe -> syntax error oder ähnliches. Daher: 
die Leertaste unter Kontrolle bekommen. Hochstelltaste und "Neue Zeile" 
geht da auch gleich mit.

Ansonsten verweise ich auf den Film "Das Schweigen der Lämmer", genauer 
gesagt auf die Stelle, wo Hannibal auf Marc Aurel verweist: "Oberste 
Prinzipien Clarice. Simplifikation… lesen Sie bei Marc Aurel nach. Bei 
jedem einzelnen Ding die Frage, was ist es in sich selbst? Was ist seine 
Natur? Was tut er, dieser Fehler, den Sie suchen?"

von quatsch (Gast)


Lesenswert?

Hulk H. schrieb:
>   CRectangle rectangle1.getBottomLeftCorner().getX(5).getY(5);
>   CRectangle rectangle2.getTopRightCorner().getX(25).getY(15);
>   CRectangle rectangle3.getFillChar();

Das ist quatsch. Google mal wie man in C++ Objekte erstellt.

Beitrag #5136162 wurde von einem Moderator gelöscht.
von Hulk H. (hulk23)


Lesenswert?

1
int main (void)
2
{
3
    // TODO: Tragen Sie hier Ihren Namen, die Matrikelnummer und die Rechnernummer ein
4
  cout << "Name:, Matrikelnummer: <Matrikelnummer>" << endl << endl;
5
  CRectangle rectangle1;
6
7
  cout << "CRectangle1[(" << rectangle1.getBottomLeftCorner().getX(5) << "," << " " << rectangle1.getBottomLeftCorner().getY(5) << ")" << "," << "(" << rectangle1.getTopRightCorner().getX(25) << " , "<< rectangle1.getTopRightCorner().getY(15)<< " )"<< ","<<  "fillChar";
8
9
10
  return 0;
11
}

Immer noch zu viele Fehler ?

Beitrag #5136174 wurde von einem Moderator gelöscht.
von rmu (Gast)


Lesenswert?

Hulk H. schrieb:
> rectangle1.getBottomLeftCorner().getX(5)

was soll das tun?

von Hulk H. (hulk23)


Lesenswert?

rectangle1.getBottomLeftCorner().getX(5)

Ich dachte in der x Koordinate 5 ausgeben ?

von rmu (Gast)


Lesenswert?

Hulk H. schrieb:
> rectangle1.getBottomLeftCorner().getX(5)
>
> Ich dachte in der x Koordinate 5 ausgeben ?

Dieser Satz macht keinen Sinn.


falls getX (noch) so
1
int CPoint::getX() const
2
{
3
  return m_x;
4
}
implementiert ist dann liefert das m_x als Ergebnis. Argument nimmt getX 
aber keines entgegen. Das const an dieser Stelle heisst, dass das Objekt 
durch diese Methode nicht modifiziert wird / werden kann.

Klarerweise bemeckert der Compiler den Aufruf mit Argument.

Ich denke der Ablauf sollte sein

* CRectangle Objekt anlegen
* Koordinaten setzen
* Objekt ausgeben

Beitrag #5136191 wurde von einem Moderator gelöscht.
von Hulk H. (hulk23)


Lesenswert?

1
////////////////////////////////////////////////////////////////////////////////
2
// Header-Dateien
3
#include <iostream>    // Header f�r die Standard-IO-Objekte (z.B. cout, cin)
4
#include <stdlib.h>
5
// TODO: F�gen Sie hier weitere ben�tigte Header-Dateien der
6
// Standard-Bibliothek ein z.B.
7
// #include <string>
8
9
using namespace std;  // Erspart den scope vor Objekte der
10
            // C++-Standard-Bibliothek zu schreiben
11
            // z.B. statt "std::cout" kann man "cout" schreiben
12
13
// Inkludieren Sie hier die Header-Files Ihrer Klassen, z.B.
14
// #include "CFraction.h"
15
#include "CPoint.h"
16
#include "CRectangle.h"
17
#include "CScreen.h"
18
19
20
// Hauptprogramm
21
// Dient als Testrahmen, von hier aus werden die Klassen aufgerufen
22
int main (void)
23
{
24
    // TODO: Tragen Sie hier Ihren Namen, die Matrikelnummer und die Rechnernummer ein
25
  cout << "Name:, Matrikelnummer: <Matrikelnummer>" << endl ;
26
  CRectangle rectangle1;
27
   CRectangle rectangle1( CPoint(5, 5), CPoint(25, 15));
28
   CRectangle rectangle1();
29
30
31
32
  return 0;
33
}


Wird so Füllzeichen ausgegeben ? CRectangle rectangle1();
 Um das Rechteck auszugeben muss ich irgendwie diese Funktion in main 
aufrufen oder ?
1
ostream& operator<< (ostream& lhs, const CRectangle& rhs){
2
  lhs << "CRectangle[(" << rhs.getBottomLeftCorner().getX() << "," << " " << rhs.getBottomLeftCorner().getY() << ")" << "," << "(" << rhs.getTopRightCorner().getX() << " , "<< rhs.getTopRightCorner().getY()<< " )"<< ","<<  "fillChar";
3
4
return lhs;
5
}

Aber wie?

von rmu (Gast)


Lesenswert?

Hulk H. schrieb:
> ostream& operator<< (ostream& lhs, const CRectangle& rhs){
>   lhs << "CRectangle[(" << rhs.getBottomLeftCorner().getX() << "," << "
> " << rhs.getBottomLeftCorner().getY() << ")" << "," << "(" <<
> rhs.getTopRightCorner().getX() << " , "<<
> rhs.getTopRightCorner().getY()<< " )"<< ","<<  "fillChar";
>
> return lhs;
> }

wie wird man einen operator wohl aufrufen?

lhs steht für "left hand side", rhs für "right hand side", also das 
"linke" und das "rechte" argument des operators (<< in dem fall), ganz 
links das was man wieder rauskriegt.

also in dem fall brauchts einen ostream und ein rectangle. cout ist ein 
passender ostream, der gibt auf die standard-ausgabe aus, in dem code 
oben legst du aus einem unerfindlichen Grund 3 CRectangle-Objekte an und 
nennst alle "rectangle1", selbst wenn das durch den Compiler geht tut 
das nicht das was man will. Also nur eines anlegen, Koordinaten setzen, 
und ausgeben, analog zur Ausgabe der Matrikelnummer.

von Hulk H. (hulk23)


Lesenswert?

Ich glaube das passt so oder leute ?
1
////////////////////////////////////////////////////////////////////////////////
2
// Header-Dateien
3
#include <iostream>    // Header f�r die Standard-IO-Objekte (z.B. cout, cin)
4
#include <stdlib.h>
5
// TODO: F�gen Sie hier weitere ben�tigte Header-Dateien der
6
// Standard-Bibliothek ein z.B.
7
// #include <string>
8
9
using namespace std;  // Erspart den scope vor Objekte der
10
            // C++-Standard-Bibliothek zu schreiben
11
            // z.B. statt "std::cout" kann man "cout" schreiben
12
13
// Inkludieren Sie hier die Header-Files Ihrer Klassen, z.B.
14
// #include "CFraction.h"
15
#include "CPoint.h"
16
#include "CRectangle.h"
17
#include "CScreen.h"
18
19
20
// Hauptprogramm
21
// Dient als Testrahmen, von hier aus werden die Klassen aufgerufen
22
int main (void)
23
{
24
    // TODO: Tragen Sie hier Ihren Namen, die Matrikelnummer und die Rechnernummer ein
25
  cout << "Name:, Matrikelnummer: <Matrikelnummer>" << endl ;
26
  CRectangle rectangle1;
27
   rectangle1( CPoint(5, 5), CPoint(25, 15) );
28
29
        cout << rectangle1;
30
   
31
32
33
34
  return 0;
35
}

Kann man die h) so machen ?

1
bool CRectangle::operator ==(const CRectangle& other) const
2
{
3
  if(other== this->CRectangle()){
4
    
5
    
6
    cout << this << endl;
7
  }
8
  return true;
9
}

von PittyJ (Gast)


Lesenswert?

Ich lese hier immer Matrikelnummer.
Hast du keine Kommilitonen? Wie lösen die eigentlich die Aufgaben?

Versuch doch einfach mal ein Gespräch in der Mensa. Wenn man zu zweit 
vor dem Rechner sitzt, dann geht es doch viel einfacher, als jedes 
syntaktische Problem hier im Forum nachzufragen.

Beitrag #5136615 wurde von einem Moderator gelöscht.
Beitrag #5136636 wurde von einem Moderator gelöscht.
Beitrag #5136891 wurde von einem Moderator gelöscht.
Beitrag #5137095 wurde von einem Moderator gelöscht.
Beitrag #5137127 wurde von einem Moderator gelöscht.
Beitrag #5137212 wurde von einem Moderator gelöscht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.