Programmierung 2

Neue Frage »

Auf diesen Beitrag antworten »
expertealiasVictor Programmierung 2

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 :

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
#ifndef ASCIISCREENSOLUTION_MYCODE_CRECTANGLE_H_
#define ASCIISCREENSOLUTION_MYCODE_CRECTANGLE_H_

#include <ostream>
using namespace std;

#include "CPoint.h"
#include "CScreen.h"

/**
 * Diese Klasse beschreibt ein Rechteck in einem
 * Ganzzahl-Koordinatensystem &#65533;ber die Eigenschaften
 * "untere linke Ecke" und "obere rechte Ecke".
 *
 * Als zus&#65533;tzliche Eigenschaft hat die Klasse ein Zeichen
 * (char) das bei der graphischen Darstellung als
 * F&#65533;llzeichen verwendet wird.
 */
class CRectangle
{
private:
	/** Die linke untere Ecke. */
	CPoint m_bottomLeft;
	/** Die rechte obere Ecke. */
	CPoint m_topRight;
	/** Das F&#65533;llzeichen f&#65533;r die graphische Darstellung. */
	char m_fillChar;

public:
	/**
	 * Erzeugt ein neues Rechteck mit linker unterer und
	 * rechter oberer Ecke bei (0,0) und dem angegebenen
	 * F&#65533;llzeichen.
	 */
	CRectangle(char fillChar = '#');

	/**
	 * Erzeugt ein neues Rechteck mit der angegebenen linken
	 * unteren und rechten oberen Ecken sowie dem angegebenen
	 * F&#65533;llzeichen.
	 *
	 * Beim Erzeugen wird die Zusicherung &#65533;berpr&#65533;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&#65533;&#65533;er als die x-Koordinate
	 * der linken unteren Ecke ist, wird sie auf den Wert
	 * der x-Koordinate der linken unteren Ecke gesetzt. Falls
	 * die y-Koordinate der rechten oberen Ecke nicht gr&#65533;&#65533;er 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 &#65533;berpr&#65533;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&#65533;ndert.
	 */
	void setCorners (CPoint bottomLeft, CPoint topRight);

	/**
	 * Liefert die linke untere Ecke des Rechtecks zur&#65533;ck.
	 */
	CPoint getBottomLeftCorner() const;

	/**
	 * Liefert die rechte obere Ecke des Rechtecks zur&#65533;ck.
	 */
	CPoint getTopRightCorner() const;

	/**
	 * Weist dem F&#65533;llzeichen den angegebene Wert zu.
	 */
	void setFillChar(char fillChar = '#');

	/**
	 * Liefert den Wert des F&#65533;llzeichens.
	 */
	char getFillChar() const;

	/**
	 * Pr&#65533;ft, ob die beiden Rechtecke in allen Eigenschaften &#65533;bereinstimmen.
	 */
	bool operator== (const CRectangle& other) const;

	/**
	 * Zeichnet das Rechteck in das &#65533;bergebene Bildschirmobjekt. Das heisst,
	 * es werden mit CScreen::setPoint die Werte aller "Punkte", die im 
	 * Bereich des Rechtecks liegen, auf das F&#65533;llzeichen des Rechtecks gesetzt.
	 */
	void draw(CScreen& screen) const;

	/**
	 * Gibt eine textuelle Darstellung des Rechtecks auf dem &#65533;bergebenen
	 * Ausgabestrom aus. Das Format ist in der Aufgabenstellung beschrieben.
	 */
	friend ostream& operator<< (ostream& lhs, const CRectangle& rhs);
};

#endif /* ASCIISCREENSOLUTION_MYCODE_CRECTANGLE_H_ */




cpp




code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:


#include "CRectangle.h"

CRectangle::CRectangle(char fillChar)
{
	m_fillChar = fillChar;
	/**
		 * Erzeugt ein neues Rechteck mit der angegebenen linken
		 * unteren und rechten oberen Ecken sowie dem angegebenen
		 * F&#65533;llzeichen.
		 *
		 * Beim Erzeugen wird die Zusicherung &#65533;berpr&#65533;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&#65533;&#65533;er als die x-Koordinate
		 * der linken unteren Ecke ist, wird sie auf den Wert
		 * der x-Koordinate der linken unteren Ecke gesetzt. Falls
		 * die y-Koordinate der rechten oberen Ecke nicht gr&#65533;&#65533;er als
		 * die y-Koordinate der linken unteren Ecke ist, wird sie auf
		 * dem Wert der y-Koordinate der linken unteren Ecke gesetzt.
		 */
	if(x_topRight < x_bottomLeft ){
		
		x_topRight = x_bottomLeft;
	}
	
	if(y_topRight < y_bottomLeft){
		
		y_topRight = y_bottomLeft;
	}
}

CRectangle::CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar)
{
	// Bitte implementieren
	
}

void CRectangle::setCorners(CPoint bottomLeft, CPoint topRight)
{
	// Bitte implementieren
}

CPoint CRectangle::getBottomLeftCorner() const
{
	// Bitte implementieren und dabei das return-Statement ersetzen.
	return CPoint();
}

CPoint CRectangle::getTopRightCorner() const
{
	// Bitte implementieren und dabei das return-Statement ersetzen.
	return CPoint();
}

void CRectangle::setFillChar(char fillChar)
{
	// Bitte implementieren
}

char CRectangle::getFillChar() const
{
	// Bitte implementieren und dabei das return-Statement ersetzen.
	return 0;
}

bool CRectangle::operator ==(const CRectangle& other) const
{
	// Bitte implementieren und dabei das return-Statement ersetzen.
	return false;
}

void CRectangle::draw(CScreen& screen) const
{
	// Bitte implementieren
}



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 ?
 
Auf diesen Beitrag antworten »
as_string

Ich kenne zwar die CPOINT Klasse nicht, aber auf ein Member eines Object greifst Du mit Objekt-Name dann ein Punkt und dann das Member zu. Was soll denn x_topRight sein? Du meinst eventuell topRight.x oder?

Gruß
Marco
Auf diesen Beitrag antworten »
as_string

Du bist außerdem im falschen Konstruktor. Dieser bekommt ja gar keine Ecken übergeben. Wieso willst Du dann etwas überprüfen, das Du gar nicht hast. Der nächste Konstruktor bekommt allerdings die Eckpunkte übergeben, da musst Du überprüfen, dannaber den Member variablen zuweisen, nicht den übergebenen.

Gruß
Marco
Auf diesen Beitrag antworten »
Victor

Aber in der Header steht doch das man die Zusicherungen im 1 konstruktor benutzen muss ?
Cpoint
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
#ifndef ASCIISCREENSOLUTION_MYCODE_CPOINT_H_
#define ASCIISCREENSOLUTION_MYCODE_CPOINT_H_

/**
 * Diese Klasse repr&#65533;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&#65533;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&#65533;ft, ob die x- und y-Koordinaten der Punkte &#65533;bereinstimmen.
   */
  bool operator== (const CPoint& other) const;

  /**
   * Pr&#65533;ft, ob sich die x- und y-Koordinaten der Punkte unterscheiden.
   */
  bool operator!= (const CPoint& other) const;
};

#endif /* ASCIISCREENSOLUTION_MYCODE_CPOINT_H_ */





code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
#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;
}



Aber nach dem define sind meine Fehler immer noch nicht weg ?


code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:

#include "CRectangle.h"
#define x_bottomLeft m_bottomLeft.x
#define y_bottomLeft m_bottomLeft.y
#define x_topRight m_topRight.x
#define y_topRight m_topRight.y
CRectangle::CRectangle(char fillChar)

{
  m_fillChar = fillChar;
  /**
     * Erzeugt ein neues Rechteck mit der angegebenen linken
     * unteren und rechten oberen Ecken sowie dem angegebenen
     * F&#65533;llzeichen.
     *
     * Beim Erzeugen wird die Zusicherung &#65533;berpr&#65533;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&#65533;&#65533;er als die x-Koordinate
     * der linken unteren Ecke ist, wird sie auf den Wert
     * der x-Koordinate der linken unteren Ecke gesetzt. Falls
     * die y-Koordinate der rechten oberen Ecke nicht gr&#65533;&#65533;er als
     * die y-Koordinate der linken unteren Ecke ist, wird sie auf
     * dem Wert der y-Koordinate der linken unteren Ecke gesetzt.
     */
  if(topRight.x < bottomLeft.x ){

    m_topRight.x = bottomLeft.x;
  }

  if(topRight.y < bottomLeft.y){

    m_topRight.y = bottomLeft.y;
  }
}

CRectangle::CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar)
{
  // Bitte implementieren

}

void CRectangle::setCorners(CPoint bottomLeft, CPoint topRight)
{
  // Bitte implementieren
}

CPoint CRectangle::getBottomLeftCorner() const
{
  // Bitte implementieren und dabei das return-Statement ersetzen.
  return CPoint();
}

CPoint CRectangle::getTopRightCorner() const
{
  // Bitte implementieren und dabei das return-Statement ersetzen.
  return CPoint();
}

void CRectangle::setFillChar(char fillChar)
{
  // Bitte implementieren
}

char CRectangle::getFillChar() const
{
  // Bitte implementieren und dabei das return-Statement ersetzen.
  return 0;
}

bool CRectangle::operator ==(const CRectangle& other) const
{
  // Bitte implementieren und dabei das return-Statement ersetzen.
  return false;
}

void CRectangle::draw(CScreen& screen) const
{
  // Bitte implementieren
}


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
 
Auf diesen Beitrag antworten »
Victor

Ne Idee?
Auf diesen Beitrag antworten »
as_string

Naja, was soll ich sagen, was ich nicht schon längst gesagt hatte? Es gibt in diesem Konstruktor nunmal weder eine Variable topRight noch bottomLeft. Du versuchst darauf zuzugreifen, bekommst einen Fehler, glaubst mir aber nicht, dass das daran liegt.
Schonmal überlegt, ob Du vielleicht die Aufgabenstellung falsch verstanden hast? Ich kann Dir nur soviel sagen: in einem Konstruktor etwas zu überprüfen, was dieser konkrete Konstruktor gar nicht übergeben bekommt, ist nicht nur logisch sinnlos sondern auch technisch nicht möglich. Das sollte eigentlich jedem einleuchten, egal ob man programmieren kann oder nicht...

Gruß
Marco
Auf diesen Beitrag antworten »
as_string

Ich habe gerade nochmal die Aufgabe angeschaut. Bei der b) steht ganz explizit, dass man die Zusicherung bei dem Konstruktor mit drei Argumenten machen soll. Wo Du das rein geschrieben hast hat der Konstruktor aber nur eines. Du musst auch mal aufmerksam die Texte lesen, sowohl die Aufgabentexte als auch die von mir. Habe häufig den Eindruck, dass Du das nicht für besonders wichtig hältst.

Gruß
Marco
Auf diesen Beitrag antworten »
Victor

Passt jetzt der Konstruktor wenigstens ?
Aber die Fehler sind leider immer noch da großes Grinsen

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
#include "CRectangle.h"

CRectangle::CRectangle(char fillChar)

{
  m_fillChar = fillChar;
  /**
     * Erzeugt ein neues Rechteck mit der angegebenen linken
     * unteren und rechten oberen Ecken sowie dem angegebenen
     * F&#65533;llzeichen.
     *
     * Beim Erzeugen wird die Zusicherung &#65533;berpr&#65533;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&#65533;&#65533;er als die x-Koordinate
     * der linken unteren Ecke ist, wird sie auf den Wert
     * der x-Koordinate der linken unteren Ecke gesetzt. Falls
     * die y-Koordinate der rechten oberen Ecke nicht gr&#65533;&#65533;er als
     * die y-Koordinate der linken unteren Ecke ist, wird sie auf
     * dem Wert der y-Koordinate der linken unteren Ecke gesetzt.
     */
  
}

CRectangle::CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar)
{
	if( topRight.x <=bottomLeft.x && topRight.y<= bottomLeft.y){
			
			m_bottomLeft = bottomLeft;
			m_topRight = topRight;
		}
}

void CRectangle::setCorners(CPoint bottomLeft, CPoint topRight)
{
	// Bitte implementieren
}

CPoint CRectangle::getBottomLeftCorner() const
{
	// Bitte implementieren und dabei das return-Statement ersetzen.
	return CPoint();
}

CPoint CRectangle::getTopRightCorner() const
{
	// Bitte implementieren und dabei das return-Statement ersetzen.
	return CPoint();
}

void CRectangle::setFillChar(char fillChar)
{
	// Bitte implementieren
}

char CRectangle::getFillChar() const
{
	// Bitte implementieren und dabei das return-Statement ersetzen.
	return 0;
}

bool CRectangle::operator ==(const CRectangle& other) const
{
	// Bitte implementieren und dabei das return-Statement ersetzen.
	return false;
}

void CRectangle::draw(CScreen& screen) const
{
	// Bitte implementieren
}

Auf diesen Beitrag antworten »
as_string

Du musst schon die Bedingungen einzeln überprüfen für jede Koordinate. Du hattest das im Prinzip schon richtig.
So würde ja, wenn nur eine Koordinate verkehrt ist, dass dann gar nichts "korrigiert" wird. Du willst aber jede Koordinate einzeln betrachten und zurecht rücken (so die Beschreibung zumindest),

Gruß
Marco

PS: komipierts so zumindest schon mal?
Auf diesen Beitrag antworten »
Victor

Ok habe jetzt den Konstruktor wieder geändert .

Leider gibt es zu viele Fehlermeldungen und ich verstehe nicht wie ich die weg bekomme?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:

* CRectangle.cpp
 *
 *  Created on: 05.02.2015
 *      Author: lipp
 */

#include "CRectangle.h"

CRectangle::CRectangle(char fillChar)

{
  m_fillChar = fillChar;
  /**
     * Erzeugt ein neues Rechteck mit der angegebenen linken
     * unteren und rechten oberen Ecken sowie dem angegebenen
     * F&#65533;llzeichen.
     *
     * Beim Erzeugen wird die Zusicherung &#65533;berpr&#65533;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&#65533;&#65533;er als die x-Koordinate
     * der linken unteren Ecke ist, wird sie auf den Wert
     * der x-Koordinate der linken unteren Ecke gesetzt. Falls
     * die y-Koordinate der rechten oberen Ecke nicht gr&#65533;&#65533;er als
     * die y-Koordinate der linken unteren Ecke ist, wird sie auf
     * dem Wert der y-Koordinate der linken unteren Ecke gesetzt.
     */

}

CRectangle::CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar)
{
	 if(topRight.x < bottomLeft.x ){

	    m_topRight.x = bottomLeft.x;
	  }

	  if(topRight.y < bottomLeft.y){

	    m_topRight.y = bottomLeft.y;
	  }
}

void CRectangle::setCorners(CPoint bottomLeft, CPoint topRight)
{
	// Bitte implementieren
}

CPoint CRectangle::getBottomLeftCorner() const
{
	// Bitte implementieren und dabei das return-Statement ersetzen.
	return CPoint();
}

CPoint CRectangle::getTopRightCorner() const
{
	// Bitte implementieren und dabei das return-Statement ersetzen.
	return CPoint();
}

void CRectangle::setFillChar(char fillChar)
{
	// Bitte implementieren
}

char CRectangle::getFillChar() const
{
	// Bitte implementieren und dabei das return-Statement ersetzen.
	return 0;
}

bool CRectangle::operator ==(const CRectangle& other) const
{
	// Bitte implementieren und dabei das return-Statement ersetzen.
	return false;
}

void CRectangle::draw(CScreen& screen) const
{
	// Bitte implementieren
}





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

Ja, CPoint hat ja auch kein x und y, sondern m_x und m_y. Die sind aber private, da kommst Du also von außen gar nicht dran.
Du musst deshalb mit den getX/Y() und setX/Y()- Methoden auf die Variablen zugreifen.
Außerdem musst Du die Zeile m_fillChar = fillChar; auch in den zweiten Konstruktor schreiben.

Gruß
Marco
Auf diesen Beitrag antworten »
Victor

Jetzt passt es ?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:

* CRectangle.cpp
 *
 *  Created on: 05.02.2015
 *      Author: lipp
 */

#include "CRectangle.h"
#include "CPoint.h"
CRectangle::CRectangle(char fillChar)

{
  m_fillChar = fillChar;
  /**
     * Erzeugt ein neues Rechteck mit der angegebenen linken
     * unteren und rechten oberen Ecken sowie dem angegebenen
     * F&#65533;llzeichen.
     *
     * Beim Erzeugen wird die Zusicherung &#65533;berpr&#65533;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&#65533;&#65533;er als die x-Koordinate
     * der linken unteren Ecke ist, wird sie auf den Wert
     * der x-Koordinate der linken unteren Ecke gesetzt. Falls
     * die y-Koordinate der rechten oberen Ecke nicht gr&#65533;&#65533;er als
     * die y-Koordinate der linken unteren Ecke ist, wird sie auf
     * dem Wert der y-Koordinate der linken unteren Ecke gesetzt.
     */

}

CRectangle::CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar)
{
	m_fillChar = fillChar;

	 if(topRight.CPoint::getX() < bottomLeft.CPoint::getX() ){

	    m_topRight.CPoint::setX(bottomLeft.getX());
	  }

	  if(topRight.CPoint::getY() < bottomLeft.CPoint::getY()){

	    m_topRight.CPoint::setY(bottomLeft.CPoint::getY());
	  }
}

void CRectangle::setCorners(CPoint bottomLeft, CPoint topRight)
{
	// Bitte implementieren
}

CPoint CRectangle::getBottomLeftCorner() const
{
	// Bitte implementieren und dabei das return-Statement ersetzen.
	return CPoint();
}

CPoint CRectangle::getTopRightCorner() const
{
	// Bitte implementieren und dabei das return-Statement ersetzen.
	return CPoint();
}

void CRectangle::setFillChar(char fillChar)
{
	// Bitte implementieren
}

char CRectangle::getFillChar() const
{
	// Bitte implementieren und dabei das return-Statement ersetzen.
	return 0;
}

bool CRectangle::operator ==(const CRectangle& other) const
{
	// Bitte implementieren und dabei das return-Statement ersetzen.
	return false;
}

void CRectangle::draw(CScreen& screen) const
{
	// Bitte implementieren
}


Auf diesen Beitrag antworten »
as_string

Eine Member Funktion rufst Du auf, indem Du nur Objekt-Punkt-Methode schreibst.
Du musst also z. B. topRight.getX () schreiben.
Außerdem musst Du irgendwie im Konstruktor alle vier Koordinatenwerte immer setzen. Du setzt ja jetzt nur x und y von topRight und nur dann, wenn eine der Zusicherungen nicht schon vorher erfüllt war.

Du musst also vorher m_topRight und m_bottomLeft vorher noch die übergebenen topRight und bottomLeft zuweisen, damit die Koordinatenwerte kopiert werden, bevor Du die Korrektur für die Zusicherung machst.

Gruß
Marco
Auf diesen Beitrag antworten »
Victor

Jetzt scheint es auch ohne das CPoint:: keine Fehler anzuzeigen .

Komisch .


code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:

#include "CRectangle.h"
#include "CPoint.h"
CRectangle::CRectangle(char fillChar)

{
  m_fillChar = fillChar;
  /**
     * Erzeugt ein neues Rechteck mit der angegebenen linken
     * unteren und rechten oberen Ecken sowie dem angegebenen
     * F&#65533;llzeichen.
     *
     * Beim Erzeugen wird die Zusicherung &#65533;berpr&#65533;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&#65533;&#65533;er als die x-Koordinate
     * der linken unteren Ecke ist, wird sie auf den Wert
     * der x-Koordinate der linken unteren Ecke gesetzt. Falls
     * die y-Koordinate der rechten oberen Ecke nicht gr&#65533;&#65533;er als
     * die y-Koordinate der linken unteren Ecke ist, wird sie auf
     * dem Wert der y-Koordinate der linken unteren Ecke gesetzt.
     */

}

CRectangle::CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar)
{
	m_fillChar = fillChar;
	m_bottomLeft = bottomLeft;
	m_topRight = topRight;

	 if(topRight.getX() < bottomLeft.getX() ){

	    m_topRight.CPoint::setX(bottomLeft.getX());
	  }

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

	    m_topRight.setY(bottomLeft.getY());
	  }
}

void CRectangle::setCorners(CPoint bottomLeft, CPoint topRight)
{
	// Bitte implementieren
}

CPoint CRectangle::getBottomLeftCorner() const
{
	// Bitte implementieren und dabei das return-Statement ersetzen.
	return CPoint();
}

CPoint CRectangle::getTopRightCorner() const
{
	// Bitte implementieren und dabei das return-Statement ersetzen.
	return CPoint();
}

void CRectangle::setFillChar(char fillChar)
{
	// Bitte implementieren
}

char CRectangle::getFillChar() const
{
	// Bitte implementieren und dabei das return-Statement ersetzen.
	return 0;
}

bool CRectangle::operator ==(const CRectangle& other) const
{
	// Bitte implementieren und dabei das return-Statement ersetzen.
	return false;
}

void CRectangle::draw(CScreen& screen) const
{
	// Bitte implementieren
}





Hoffe jetzt ok?
Auf diesen Beitrag antworten »
Victor

Habe mittlerweile auch die getter und setter Methode implementiert , kannst du bitte auf Fehler gucken ?

Aber Compiler Fehlermeldungen habe ich schon mal keine. großes Grinsen


code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:

/*
 * CRectangle.cpp
 *
 *  Created on: 05.02.2015
 *      Author: lipp
 */

#include "CRectangle.h"
#include "CPoint.h"
CRectangle::CRectangle(char fillChar)

{
  m_fillChar = fillChar;
  /**
     * Erzeugt ein neues Rechteck mit der angegebenen linken
     * unteren und rechten oberen Ecken sowie dem angegebenen
     * F&#65533;llzeichen.
     *
     * Beim Erzeugen wird die Zusicherung &#65533;berpr&#65533;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&#65533;&#65533;er als die x-Koordinate
     * der linken unteren Ecke ist, wird sie auf den Wert
     * der x-Koordinate der linken unteren Ecke gesetzt. Falls
     * die y-Koordinate der rechten oberen Ecke nicht gr&#65533;&#65533;er als
     * die y-Koordinate der linken unteren Ecke ist, wird sie auf
     * dem Wert der y-Koordinate der linken unteren Ecke gesetzt.
     */

}

CRectangle::CRectangle(CPoint bottomLeft, CPoint topRight, char fillChar)
{
	m_fillChar = fillChar;
	m_bottomLeft = bottomLeft;
	m_topRight = topRight;

	 if(topRight.getX() < bottomLeft.getX() ){

	    m_topRight.CPoint::setX(bottomLeft.getX());
	  }

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

	    m_topRight.setY(bottomLeft.getY());
	  }
}


void CRectangle::setCorners(CPoint bottomLeft, CPoint topRight)
{
	if(topRight.getX()> bottomLeft.getX() && topRight.getY()> bottomLeft.getY()){
		
		m_bottomLeft = bottomLeft;
		m_topRight = topRight;
	}
}

CPoint CRectangle::getBottomLeftCorner() const
{
	// Bitte implementieren und dabei das return-Statement ersetzen.
	return m_bottomLeft;
}

CPoint CRectangle::getTopRightCorner() const
{
	// Bitte implementieren und dabei das return-Statement ersetzen.
	return m_topRight;
}

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

char CRectangle::getFillChar() const
{
	// Bitte implementieren und dabei das return-Statement ersetzen.
	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
}

Auf diesen Beitrag antworten »
as_string

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

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

Gruß
Marco

PS: Ich werde mal irgendwann den Quelltext bei mir ausprobieren müssen. Komme nur gerade nicht so dazu.
Auf diesen Beitrag antworten »
Victor

Soll ich meine 2 Besingungen einfach aufteilen in 2 Bedingungen oder wie ?
Auf diesen Beitrag antworten »
Victor

Ich versuche jetzt gerade den operator zu implementieren ?

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


weil er hat normalerweise ja nur bottomLeft , topRight , fillChar

.

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

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


}
Auf diesen Beitrag antworten »
as_string

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

Nein, Deine Operator-Definition ist kompletter Mist!

Gruß
Marco
Auf diesen Beitrag antworten »
Victor

Hast du irgendwie paar Tipps ?

Oder soll ich einfach ausgeben mittels lhs?
Auf diesen Beitrag antworten »
Victor

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

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

Bin kein Experte beim proggen.


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

return lhs;
}



Oder wieder mal Mist ? großes Grinsen
Auf diesen Beitrag antworten »
as_string

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

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

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

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

Gruß
Marco
Auf diesen Beitrag antworten »
Victor

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


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

return lhs;
}



Fehler:

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

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

Gruß
Marco
Auf diesen Beitrag antworten »
Victor

Gut bin jetzt ein wenig weiter gegangen mit meiner Aufgabe .

Bin jetzt gerade beim testen .


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

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

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


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

	return 0;
}




Wie soll ich das mit operator << ausgeben ?

Das Rechteck irgendwie mit this ausgeben ?
Auf diesen Beitrag antworten »
as_string

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

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

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

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

Gruß
Marco
Auf diesen Beitrag antworten »
Victor

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

return lhs;
}



Was soll ich statt dem endl schreiben dann ?

Ist meine obere main ok?

Wie gebe ich das Rechteck aus beim operator?
Auf diesen Beitrag antworten »
as_string

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

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

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

Gruß
Marco
Auf diesen Beitrag antworten »
Victor

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

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

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

return lhs;
}


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


Was soll ich den genau mit operator << ausgeben ?
Ich verstehe das ehrlich gesagt gar nicht .
Was wollen die von mir ?
Auf diesen Beitrag antworten »
as_string

Du hast jetzt ja auch kein Semikolon mehr am Zeilenende!
Auf diesen Beitrag antworten »
as_string

Auch fillChar in Anführungszeichen ist Quatsch. Du willst das Füllzeichen doch ausgeben, nicht den String " fillChar". Wie kommst Du an das Füllzeichen ran?
Und die eckige Klammer zu fehlt auch immer noch, wie auch die Ausgabe der einfachen Hochkommata um das Füllzeichen rum.
Auf diesen Beitrag antworten »
as_string

Ich habe die Aufgabe nochmal gelesen. Mein Text über die Ausgabe des Rechtecke war falsch.
Die meinen mit "Ausgabe des Rechtecks" einfach Verwendung des operator <<, den wir ja dann implementiert haben.
Du sollst also eine main() schreiben, die Objekte der Klasse CRectangle anlegt und diese mit cout << ... ausgibt.
Und ein paar Vergleiche soll man auch noch machen.

Gruß
Marco
Auf diesen Beitrag antworten »
Victor

Meinst du es irgendwie so ?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:


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

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


// Hauptprogramm
// Dient als Testrahmen, von hier aus werden die Klassen aufgerufen
int main (void)
{
    // TODO: Tragen Sie hier Ihren Namen, die Matrikelnummer und die Rechnernummer ein
	cout << "Name:, Matrikelnummer: <Matrikelnummer>" << endl << endl;

	CRectangle rectangle1.getBottomLeftCorner().getX(5).getY(5);
	CRectangle rectangle2.getTopRightCorner().getX(25).getY(15);
	CRectangle rectangle3.getFillChar();
	
	cout <<  rectangle1 <<  " , " <<  rectangle2 << "," << rectangle3 
	

	return 0;
}


Ich verstehe nicht warum eclipse dauern 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
Auf diesen Beitrag antworten »
Victor

Ist das auch völliger Quatsch ?


code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:

int main (void)
{
    // TODO: Tragen Sie hier Ihren Namen, die Matrikelnummer und die Rechnernummer ein
	cout << "Name:, Matrikelnummer: <Matrikelnummer>" << endl << endl;
	CRectangle rectangle1;

	cout << "CRectangle1[(" << rectangle1.getBottomLeftCorner().getX(5) << "," << " " << rectangle1.getBottomLeftCorner().getY(5) << ")" << "," << "(" << rectangle1.getTopRightCorner().getX(25) << " , "<< rectangle1.getTopRightCorner().getY(15)<< " )"<< ","<<  "fillChar";


	return 0;
}
Auf diesen Beitrag antworten »
as_string

Ich weiß nicht, ob das so irgendeine Zukunft hat.
Was soll das hier z. B.:
code:
1:
rectangle1.getBottomLeftCorner().getX(5)

Die Methode getX() ist deklariert, dass es keine Argumente annimmt:
code:
1:
2:
3:
4:
5:
  /**
   * Liefert den Wert der x-Koordinate.
   */
  int getX() const;

Die Klammer in der Deklaration ist leer!

Aber was willst Du überhaupt damit erreichen? Wenn Du ein neues Objekt machen willst, dann machst Du das mit new und rufst damit einen Konstruktor auf.

Ich denke, es wäre viel sinnvoller, wenn Du erst Grundlagen der Programmierung mit C++ lernst. Das hilft Dir doch sonst auch alles nicht weiter, oder?

Gruß
Marco
Auf diesen Beitrag antworten »
Victor

Ah ok .

Ich dachte durch die 5 würde eine 5 als X Koordinate ausgegeben werden großes Grinsen

Aber hier hatte ich es doch so gemacht :

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

	return 0;
}



Ist das nicht richtig?
Auf diesen Beitrag antworten »
Victor

Der Konstruktor hat ja nur eine Koordinate , nicht x und y?
Auf diesen Beitrag antworten »
as_string

Nein, wenn Du ein neues Rechteck anlegen willst, musst Du den Konstruktor mit "new" aufrufen.
Dafür musst Du aber auch neue Eckpunkte machen, die auch mit new angelegt werden müssen.
Auf diesen Beitrag antworten »
as_string

welcher Konstruktor hat eine Koordinate?
Auf diesen Beitrag antworten »
as_string

Du willst ein Rechteck mit den beiden Eckpunkten anlegen. Da gibt es einen Konstruktor dafür, dem Du zwei CPoint-Objekte übergeben musst.
Du kannst dann so was schreiben:
code:
1:
CRectangle rectangle1 = new CRectangle(new CPoint(5, 5), new CPoint(25, 15));
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »