ISO C++ forbids declaration of `loesche_bild' with no type
-
Ich bin ein absoluter C-Neuling und versuche nun, die Sprache laut einem Buch zu lernen. Nun bin ich an einer Stelle mit "Funktionen", hab das Beispiel genau abgetippt und bekomm vom GCC den Fehler: ISO C++ forbids declaration of `loesche_bild' with no type
Der Code:
/*bsp015*/ #include <stdio.h> loesche_bild(){ int x; for (x=1; x<=25; x=x+1){ printf("\n"); } } main(){ int x,y,z; loesche_bild(); printf("\nBitte x eingeben> "); scanf("%i",&x); loesche_bild(); printf("\ny="); scanf("%i",&y); loesche_bild(); printf("\nz="); scanf("%i",&z); loesche_bild(); printf("%i+%i+%i=%i",x,y,z,(x+y+z)); }
Ich habe die SuFu zwar benutzt, habe aber nichts brauchbares gefunden.
-
Hallo,
du übersetzt deinen Code mit 'nem C++ Compiler und der will bei Funktionen unbedingt einen Rückgabetyp sehen (int, float, char, void usw.). Ein C Compiler würde annehmen, dass loesche_bild() int zurückgibt (wenn du nichts hinschreibst), allerdings fehlt dann unten ein return.
Die Funktion main bildet übrigens ein Spezialfall. Du kannst bei ihr sowohl das int als auch das return weglassen und befindest dich immer noch im C und C++ Standard.
Richtig müsste es also heißen:
void loesche_bild(){ int x; for (x=1; x<=25; x=x+1){ printf("\n"); } }
-
eine funktion muss immer einen rückgabewert (typ) haben, der vor dem funktionsnamen steht. wenn die funktion nichts zurückgeben soll, ist der rückgabewert "void".
[...] void loesche_bild() [...]
du solltest dir vielleicht nochmal ein grundlagen buch/tutorial ansehen.
mfg,
julian// edit: zu langsam getippt ...
-
/*bsp015*/ #include <stdio.h> void loesche_bild(void){ int x; for (x=1; x<=25; x=x+1){ printf("\n"); } } int main(void){ int x,y,z; loesche_bild(); printf("\nBitte x eingeben> "); scanf("%i",&x); loesche_bild(); printf("\ny="); scanf("%i",&y); loesche_bild(); printf("\nz="); scanf("%i",&z); loesche_bild(); printf("%i+%i+%i=%i",x,y,z,(x+y+z)); return 0; }
oder auch
int main(int argc, char *argv[]){ }
schreibs mal so, die Funktionen müssen (meines Wissens) immer irgendwie deklariert sein, wenn du weder was mit in die Funktion reingeben willst noch etwas zurückerhalten willst musst du 2x void verwenden.
void am Anfang bedeutet keinen Rückgabewert, void in der Funktion, daß du nicht übergibst, ich hoffe das war verständlich
-
Danke, jetzt funktioniert alles.
In meinem Buch steht davon zwar nichts drin, aber vllt haben die einen anderen Compiler benutzt.
-
CProof schrieb:
In meinem Buch steht davon zwar nichts drin, aber vllt haben die einen anderen Compiler benutzt.
ja, sie haben sehr wahrscheinlich einen C compiler benutzt.
-
GPC schrieb:
(...) Ein C Compiler würde annehmen, dass loesche_bild() int zurückgibt (wenn du nichts hinschreibst)
(...)Ist aber, glaube ich, nicht einmal mehr C-Standard. Hab ich zumindest in meinem (C++) Buch so am Rande gelesen.
-
Wobei anzumerken wäre, dass das implizite int (genaugenommen geht es um eine implizite Funktionsdeklaration in einem Ausruck) auch in C99 nicht mehr existiert und immerhin heißt das Forum ANSI C. Steinzeitlichen Sprachkonstrukten sollte man so oder so aus dem Weg gehen.