Rückgabewert ist selbst erfundener Datentyp
-
Hi,
also es ist so ich möchte eine Funktion schreiben mit den Rückgabewert einer Struktur. Aber in der Funktion sind ziemlich viele Fehler die meist nur lauten fehlendes Semikolon oder fehlende Klammer. Ich weis echt nicht weiter. Kann mir bitte wer helfen.struct rgb { float s_red; float s_green; float s_blue; }; rgb f_rgb(float farbe,short *hilf) { rgb buf; if(hilf == 0) { hilf = 1; return(hilf); } if(hilf == 1) { rgb.buf.s_red = rgb.buf.s_red - farbe; if(rgb.buf.s_red <= 0) { hilf = 2; rgb.buf.s_red = 0; return(buf); } } if(hilf == 2) { rgb.buf.s_red = rgb.buf.s_red + farbe; rgb.buf.s_green = rgb.buf.s_green - farbe; if(rgb.buf.s_red >= 255 && rgb.buf.s_green <= 0) { hilf = 3; rgb.buf.s_red = 255; rgb.buf.s_green = 0; return(buf); } } if(hilf == 3) { rgb.buf.s_green = rgb.buf.s_green + farbe; rgb.buf.s_blue = rgb.buf.s_blue - farbe; if(rgb.buf.s_green >= 255 && rgb.buf.s_blue <= 0) { hilf = 4; rgb.buf.s_green = 255; rgb.buf.s_blue = 0; return(buf); } } if(hilf == 4) { rgb.buf.s_green = rgb.buf.s_green - farbe; if(rgb.buf.s_green <= 0) { hilf = 5; rgb.buf.s_green = 0; return(buf); } } if(hilf == 5) { rgb.buf.s_green = rgb.buf.s_green + farbe; rgb.buf.s_red = rgb.buf.s_red - farbe; if(rgb.buf.s_red <= 0 && rgb.buf.s_green >= 255) { hilf = 6; rgb.buf.s_red = 0; rgb.buf.s_green = 255; return(buf); } } if(hilf == 6) { rgb.buf.s_green = rgb.buf.s_green - farbe; rgb.buf.s_blue = rgb.buf.s_blue + farbe; if(rgb.buf.s_blue <= 0 && rgb.buf.s_blue >= 255) { hilf = 7; rgb.buf.s_blue = 255; rgb.buf.s_green = 0; return(buf); } } if(hilf == 7) { rgb.buf.s_blue = rgb.buf.s_blue - farbe; if(rgb.buf.s_blue < 0) { return(0); } } return(buf); }
Fehlermeldungen :
--------------------Konfiguration: Punkte - Win32 Debug-------------------- Kompilierung läuft... Punkte.cpp C:\users\Poschenrieder\Punkte\Punkte.cpp(249) : error C2440: '=' : 'const int' kann nicht in 'short *' konvertiert werden Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat C:\users\Poschenrieder\Punkte\Punkte.cpp(250) : error C2440: 'return' : 'short *' kann nicht in 'struct rgb' konvertiert werden Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Ueberladungsaufloesung des Konstruktors ist mehrdeutig C:\users\Poschenrieder\Punkte\Punkte.cpp(253) : error C2446: '==' : Keine Konvertierung von 'const int' in 'short *' Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat C:\users\Poschenrieder\Punkte\Punkte.cpp(253) : error C2040: '==' : 'short *' unterscheidet sich von 'const int' in bezug auf die Anzahl vorgenommener Dereferenzierungen C:\users\Poschenrieder\Punkte\Punkte.cpp(255) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(255) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(256) : error C2143: Syntaxfehler : Fehlendes ')' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(256) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(256) : error C2059: Syntaxfehler : ')' C:\users\Poschenrieder\Punkte\Punkte.cpp(257) : error C2143: Syntaxfehler : Fehlendes ';' vor '{' C:\users\Poschenrieder\Punkte\Punkte.cpp(258) : error C2440: '=' : 'const int' kann nicht in 'short *' konvertiert werden Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat C:\users\Poschenrieder\Punkte\Punkte.cpp(259) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(259) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(264) : error C2446: '==' : Keine Konvertierung von 'const int' in 'short *' Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat C:\users\Poschenrieder\Punkte\Punkte.cpp(264) : error C2040: '==' : 'short *' unterscheidet sich von 'const int' in bezug auf die Anzahl vorgenommener Dereferenzierungen C:\users\Poschenrieder\Punkte\Punkte.cpp(266) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(266) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(267) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(267) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(268) : error C2143: Syntaxfehler : Fehlendes ')' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(268) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(268) : error C2059: Syntaxfehler : ')' C:\users\Poschenrieder\Punkte\Punkte.cpp(269) : error C2143: Syntaxfehler : Fehlendes ';' vor '{' C:\users\Poschenrieder\Punkte\Punkte.cpp(270) : error C2440: '=' : 'const int' kann nicht in 'short *' konvertiert werden Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat C:\users\Poschenrieder\Punkte\Punkte.cpp(271) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(271) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(272) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(272) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(277) : error C2446: '==' : Keine Konvertierung von 'const int' in 'short *' Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat C:\users\Poschenrieder\Punkte\Punkte.cpp(277) : error C2040: '==' : 'short *' unterscheidet sich von 'const int' in bezug auf die Anzahl vorgenommener Dereferenzierungen C:\users\Poschenrieder\Punkte\Punkte.cpp(279) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(279) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(280) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(280) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(281) : error C2143: Syntaxfehler : Fehlendes ')' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(281) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(281) : error C2059: Syntaxfehler : ')' C:\users\Poschenrieder\Punkte\Punkte.cpp(282) : error C2143: Syntaxfehler : Fehlendes ';' vor '{' C:\users\Poschenrieder\Punkte\Punkte.cpp(283) : error C2440: '=' : 'const int' kann nicht in 'short *' konvertiert werden Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat C:\users\Poschenrieder\Punkte\Punkte.cpp(284) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(284) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(285) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(285) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(290) : error C2446: '==' : Keine Konvertierung von 'const int' in 'short *' Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat C:\users\Poschenrieder\Punkte\Punkte.cpp(290) : error C2040: '==' : 'short *' unterscheidet sich von 'const int' in bezug auf die Anzahl vorgenommener Dereferenzierungen C:\users\Poschenrieder\Punkte\Punkte.cpp(292) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(292) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(293) : error C2143: Syntaxfehler : Fehlendes ')' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(293) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(293) : error C2059: Syntaxfehler : ')' C:\users\Poschenrieder\Punkte\Punkte.cpp(294) : error C2143: Syntaxfehler : Fehlendes ';' vor '{' C:\users\Poschenrieder\Punkte\Punkte.cpp(295) : error C2440: '=' : 'const int' kann nicht in 'short *' konvertiert werden Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat C:\users\Poschenrieder\Punkte\Punkte.cpp(296) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(296) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(301) : error C2446: '==' : Keine Konvertierung von 'const int' in 'short *' Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat C:\users\Poschenrieder\Punkte\Punkte.cpp(301) : error C2040: '==' : 'short *' unterscheidet sich von 'const int' in bezug auf die Anzahl vorgenommener Dereferenzierungen C:\users\Poschenrieder\Punkte\Punkte.cpp(303) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(303) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(304) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(304) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(305) : error C2143: Syntaxfehler : Fehlendes ')' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(305) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(305) : error C2059: Syntaxfehler : ')' C:\users\Poschenrieder\Punkte\Punkte.cpp(306) : error C2143: Syntaxfehler : Fehlendes ';' vor '{' C:\users\Poschenrieder\Punkte\Punkte.cpp(307) : error C2440: '=' : 'const int' kann nicht in 'short *' konvertiert werden Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat C:\users\Poschenrieder\Punkte\Punkte.cpp(308) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(308) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(309) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(309) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(314) : error C2446: '==' : Keine Konvertierung von 'const int' in 'short *' Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat C:\users\Poschenrieder\Punkte\Punkte.cpp(314) : error C2040: '==' : 'short *' unterscheidet sich von 'const int' in bezug auf die Anzahl vorgenommener Dereferenzierungen C:\users\Poschenrieder\Punkte\Punkte.cpp(316) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(316) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(317) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(317) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(318) : error C2143: Syntaxfehler : Fehlendes ')' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(318) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(318) : error C2059: Syntaxfehler : ')' C:\users\Poschenrieder\Punkte\Punkte.cpp(319) : error C2143: Syntaxfehler : Fehlendes ';' vor '{' C:\users\Poschenrieder\Punkte\Punkte.cpp(320) : error C2440: '=' : 'const int' kann nicht in 'short *' konvertiert werden Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat C:\users\Poschenrieder\Punkte\Punkte.cpp(321) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(321) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(322) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(322) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(327) : error C2446: '==' : Keine Konvertierung von 'const int' in 'short *' Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat C:\users\Poschenrieder\Punkte\Punkte.cpp(327) : error C2040: '==' : 'short *' unterscheidet sich von 'const int' in bezug auf die Anzahl vorgenommener Dereferenzierungen C:\users\Poschenrieder\Punkte\Punkte.cpp(329) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(329) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(330) : error C2143: Syntaxfehler : Fehlendes ')' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(330) : error C2143: Syntaxfehler : Fehlendes ';' vor '.' C:\users\Poschenrieder\Punkte\Punkte.cpp(330) : error C2059: Syntaxfehler : ')' C:\users\Poschenrieder\Punkte\Punkte.cpp(331) : error C2143: Syntaxfehler : Fehlendes ';' vor '{' C:\users\Poschenrieder\Punkte\Punkte.cpp(332) : error C2440: 'return' : 'const int' kann nicht in 'struct rgb' konvertiert werden Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Ueberladungsaufloesung des Konstruktors ist mehrdeutig Fehler beim Ausführen von cl.exe. Punkte.exe - 93 Fehler, 0 Warnung(en)
Thnx Ernd
-
struct rgb { float s_red; float s_green; float s_blue; }; rgb f_rgb(float farbe,short *hilf) { rgb buf; // einen pointer musst du mit * dereferenzieren if(*hilf == 0) { *hilf = 1; //return(hilf); // wieso gibst du hier hilf zurück, das als typ ein short * ist, du hast aber die funktion so deklariert, dass sie die struktur rgb zurückgibt... passt net! } if(*hilf == 1) { // der strukturname darf nicht nochmal davor stehen, du hast ja shcon eine instant von rgb (undzwar buf) //rgb.buf.s_red = rgb.buf.s_red - farbe; buf.s_red = buf.s_red - farbe; if(buf.s_red <= 0) { *hilf = 2; buf.s_red = 0; return(buf); } } if(*hilf == 2) { buf.s_red = buf.s_red + farbe; buf.s_green = buf.s_green - farbe; if(buf.s_red >= 255 && buf.s_green <= 0) { *hilf = 3; buf.s_red = 255; buf.s_green = 0; return(buf); } } if(*hilf == 3) { buf.s_green = buf.s_green + farbe; buf.s_blue = buf.s_blue - farbe; if(buf.s_green >= 255 && buf.s_blue <= 0) { *hilf = 4; buf.s_green = 255; buf.s_blue = 0; return(buf); } } if(*hilf == 4) { buf.s_green = buf.s_green - farbe; if(buf.s_green <= 0) { *hilf = 5; buf.s_green = 0; return(buf); } } if(*hilf == 5) { buf.s_green = buf.s_green + farbe; buf.s_red = buf.s_red - farbe; if(buf.s_red <= 0 && buf.s_green >= 255) { *hilf = 6; buf.s_red = 0; buf.s_green = 255; return(buf); } } if(*hilf == 6) { buf.s_green = buf.s_green - farbe; buf.s_blue = buf.s_blue + farbe; if(buf.s_blue <= 0 && buf.s_blue >= 255) { *hilf = 7; buf.s_blue = 255; buf.s_green = 0; return(buf); } } if(*hilf == 7) { buf.s_blue = buf.s_blue - farbe; if(buf.s_blue < 0) { return(0); } } return(buf); }
warum setzt du eigentlich immer hilf eins höher, als in der if-bedingung abgefragt?? brauch der aufrufer deiner funktion diese information?? wenn nein, könntest du dir das mit dem pointer sparen, also im funktionsrumpf nur short hilf schreiben und dann würdest du dir die dereferenzierungen sparen!
ansonsten müsste der code jetzt compilierbar sein...
-
Probier mal dein struct wie folgt zu initialisieren:
rgb f_rgb(float farbe,short *hilf) { struct rgb buf; ...
des war bei mir der erste Fehler wo er rumgemeckert hat ...
-
stimmt, das hab ich ganz vergessen... scheiß-C++-Angewohnheiten
-
Da hier ein C++-Compiler benutzt wird, ist das wohl nicht so relevant. Gehört auch nicht in dieses Forum.
-
@Ernd
Warum fragst du *hilf nicht mit einem switch ab?