Hilfe bei rechteck programieren! komischer fehler
-
sry aber das kapier ich nicht.
bitte nich ausrasten wegen meiner blödheit
-
NeoSR schrieb:
sry aber das kapier ich nicht.
Du musst auch in der Definition hinter einer Funktion eine Parameterliste in () schreiben. Auch wenn diese Leer ist:
z.B. double crechteck::berechneumfang**()**double crechteck::berechneflaeche { berechneflaeche = seiteA*seiteB; printf("die Flaeche betraegt:%i\n",berechneflaeche(double, double); }Sollte wohl eher so aussehen
double crechteck::berechneflaeche() { double ergebnis = seiteA * seiteB; printf("die Flaeche betraegt:%i\n", ergebnis); return ergebnis; }1. Du willst ja was zurückgeben, zumindest deutet es das "double crechteck::berechneflaeche()" an, also brauchen wir ein return.
2. Das was du zuerst im printf angegeben hast ist ein Funktionsaufruf, da gehören wenn schon Werte rein (nicht typen) und zudem hast du keine solche Funktion, die zwei Werte akzeptiert.
3. Die Angabe %i im printf ist mit Sicherheit nicht das gewünschte, wenn du mit double-Typen arbeitest. "%i" steht für, ich zitiere "Signed decimal integer" - du hast aber keinen Integer (Ganzzahlentyp) sondern einen Gleitkommawert (z.B. %f).
4. Vielleicht solltest du dir ein einfaches Einsteigerbuch oder Tutorial suchen und wirklich von Begin an durchgehen. Irgendwie habe ich hier den Eindruck das du versucht hast über das Ziel zu schießen ohne die absoluten Grundsachen verstanden zu haben (Ist nicht böse gemeint).
cu André
-
ah danke das verstehe ich nun, mit beispielen ist das eh viel besser zu erklären denke ich als nur mit text. werde es morgen umändern und schauen was passiert
DANKE DANKE DANKE schonmal.
mfg
christian!!!
-
1. dein copy- construktor ist müll, sollte ungefähr so lauten:
crechteck::crechteck(const crechteck &scr){ seiteA= scr.seiteA; seiteB= scr.seiteB; }2. du hast 2 mal den gleiche Konstruktor implementiert
-
NeoSR schrieb:
habs korrigiert aber immernoch der behinderte fehler
weiß jemand vielleicht was der bedeutet???? ich jedenfalls vesteh gar nich was der will mit seinem fehler da.
Das bedeutet, das Microsoft einen Fehler in seinem Compiler hat. f'`8k
AutocogitoGruß, TGGC (making great games since 1992)
-
Reitet doch nicht auf Nebensächlichkeiten rum...
#ifndef RECTANGLE_T_HXX_INCLUDED #define RECTANGLE_T_HXX_INCLUDED RECTANGLE_T_HXX_INCLUDED #include <ostream> template< typename T > class rectangle_t { template< typename T > friend std::ostream& operator<<( std::ostream &stream, const rectangle_t< T > &object ); private: T m_width, m_height; T m_perimeter, m_area; void update( ) { m_perimeter = 2 * m_width + 2 * m_height; m_area = m_width * m_height; } public: const T& width, &height; const T& perimeter, &area; rectangle_t( ) : m_width( 0 ), m_height( 0 ), m_perimeter( 0 ), m_area( 0 ), width( m_width ), height( m_height ), perimeter( m_perimeter ), area( m_area ) { }; rectangle_t( T width, T height ) : m_width( width ), m_height( height ), m_perimeter( 2 * width + 2 * height ), m_area( width * height ), width( m_width ), height( m_height ), perimeter( m_perimeter ), area( m_area ) { }; rectangle_t( const rectangle_t& other ) : m_width( other.m_width ), m_height( other.m_height ), m_perimeter( other.m_perimeter ), m_area( other.m_area ), width( m_width ), height( m_height ), perimeter( m_perimeter ), area( m_area ) { }; void set_width( T width ) { m_width = width; update( ); } void set_height( T height ) { m_height = height; update( ); } void set_width_height( T width, T height ) { m_width = width; m_height = height; update( ); } // todo: operator=( ) ;) }; template< typename T > std::ostream& operator<<( std::ostream& stream, const rectangle_t< T > &object ) { stream << "Rectangle (width: " << object.m_width << ", height: " << object.m_height << ")"; return stream; } #endif /* ifndef RECTANGLE_T_HXX_INCLUDED */#include <iostream> #include "rectangle_t.hxx" int main( ) { rectangle_t< float > rectangle( 5, 4.2 ); std::cout << rectangle << std::endl; std::cout << "Area: " << rectangle.area << std::endl; std::cout << "Perimeter: " << rectangle.perimeter << std::endl; }ich bin neugierig: Was machst jetzt mit deinem Rechteck?
greetz, Swordfish
-
Swordfish schrieb:
const T& width, height; const T& perimeter, area;Dir ist klar, daß height und area keine Referenzen sind, sondern Kopien? (und daß dein Copy-Ctor auch Unsinn macht:
rectangle_t<double> r1; rectangle_t<double> r2 = r1; r1.set_width(40); cout<<r2.perimeter;
-
CStoll schrieb:
Swordfish schrieb:
const T& width, height; const T& perimeter, area;Dir ist klar, daß height und area keine Referenzen sind, sondern Kopien? [...]
Autsch!

Danke
CStoll schrieb:
(und daß dein Copy-Ctor auch Unsinn macht:
rectangle_t<double> r1; rectangle_t<double> r2 = r1; r1.set_width(40); // !? cout<<r2.perimeter;?
greetz, Swordfish
-
Swordfish schrieb:
CStoll schrieb:
(und daß dein Copy-Ctor auch Unsinn macht:
rectangle_t<double> r1; rectangle_t<double> r2 = r1; r1.set_width(40); // !? cout<<r2.perimeter;?
OK, da habe ich wohl schief geguckt, aber bei so einer langen Initialisierungsliste ist etwas Übersicht hilfreich

(PS: Aber dafür fehlt etwas anderes: ein funktionsfähiger op= (die Default-Version scheitert an den Referenzen))
-
Aja, hab' das als
todoangemerkt.
greetz, Swordfish