typedef struct problem
-
Servus,
ich habe eine Struktur erstellt:
... typedef struct { double Re, Im; }tComplex; ... int main(void) { tComplex c; ...
Jedoch erhalte ich immer die Meldung: tComplex illegal use of this type ans an expression.
Woran liegt das?
-
Nicht an diesem Codefetzen. Du benutzt irgendwo tComplex als Ausdruck, und dein Compiler sagt dir mit ziemlicher Sicherheit auch, in welcher Zeile das ist. Kuck in dieser Zeile nach.
-
Ins Blaue geraten: Du verwendest einen Compiler, der nur den C89-Standard befolgt (MSVC bspw.) und die betrffende Zeile steht nicht am Scopeanfang.
-
Fabi89 schrieb:
... typedef struct { double Re, Im; }tComplex; ... int main(void) { tComplex c; ...
Probier mal
... typedef struct tComplex { double Re, Im; }tComplex; ...
Wenn Du die Struktur nicht benennst, kannst Du später keine "Variable" dafür erzeugen.
Probier es spaßeshalber mal mit Deiner Version und einem globalentComplex c;
direkt nach dem deklarieren des Typedefs. Da sollte er noch Bescheid wissen.
-
Ich benutze Visual Studio 2008. Das müsste C99 unterstützen.
Der Fehler liegt laut Kompiler genau in dieser Zeile.Ich poste mal den kompletten Code. Steht natürlich noch viel müll drin, da ich das Prog noch nicht testen konnte. Der gleiche Fehler ist auch bei
tColor skyblue.#include "vscr.h" #define SIZE_X 640 #define SIZE_Y 480 #define MAX_ITERATION 196 #define MAX_BETRAG 4 typedef struct { unsigned int alpha; unsigned char blau, gruen, rot; }tColor; typedef struct { double Re, Im; }tComplex; static char* VideoRam; int Iteration(tComplex *c); void *ColorFromInt(int index) { static unsigned char f[4] = { 0,0,0,255 }; f[0] = (unsigned char)index<<3; f[1] = (unsigned char)(index>>6)<<3; f[2] = (unsigned char)(index>>3)<<3; return &f; }; int main(void) { VideoRam = VOpenVirtualScreen(SIZE_X,SIZE_Y+1); tColor skyblue; <----- Fehler hier skyblue.alpha=255; skyblue.blau=0xEB; skyblue.gruen=0xCE; skyblue.rot=0x87; FillScreen(skyblue); tComplex c; <----- Fehler hier c.Im=0.0; c.Re=0.0; printf("Iteration: %d \n",Iteration(c)); VWait(); return 0; } ...
-
h0rst schrieb:
Fabi89 schrieb:
... typedef struct { double Re, Im; }tComplex; ... int main(void) { tComplex c; ...
Probier mal
... typedef struct tComplex { double Re, Im; }tComplex; ...
Wenn Du die Struktur nicht benennst, kannst Du später keine "Variable" dafür erzeugen.
Probier es spaßeshalber mal mit Deiner Version und einem globalentComplex c;
direkt nach dem deklarieren des Typedefs. Da sollte er noch Bescheid wissen.
Gleicher Fehler wie vorher.
-
Fabi89 schrieb:
Ich benutze Visual Studio 2008. Das müsste C99 unterstützen.
Visual C++ ist eigentlich dafür bekannt, nur C89 zu unterstützen.
-
Bashar schrieb:
Fabi89 schrieb:
Ich benutze Visual Studio 2008. Das müsste C99 unterstützen.
Visual C++ ist eigentlich dafür bekannt, nur C89 zu unterstützen.
hmm, das habe ich nicht gewusst.
-
Du musst auch zwischen C und C++ unterscheiden. Bei C gibt es bei VS nur C89.
-
DirkB schrieb:
Du musst auch zwischen C und C++ unterscheiden. Bei C gibt es bei VS nur C89.
ist C, kein C++.
-
Das Problem ist damit gelöst, oder?
-
Bashar schrieb:
Das Problem ist damit gelöst, oder?
Mir hilft das nicht.
Der Code ist Teil einer Aufgabe an der Uni. Warum sollten die eine Aufgabe stellen, die mit dem dazugehörigen Kompiler nicht lösbar ist?
-
Fabi89 schrieb:
Bashar schrieb:
Das Problem ist damit gelöst, oder?
Mir hilft das nicht.
OK, dann stell den Code so um:
int main(void) { tColor skyblue; /* kein Fehler mehr */ VideoRam = VOpenVirtualScreen(SIZE_X,SIZE_Y+1); skyblue.alpha=255; skyblue.blau=0xEB;
Der Code ist Teil einer Aufgabe an der Uni. Warum sollten die eine Aufgabe stellen, die mit dem dazugehörigen Kompiler nicht lösbar ist?
Keine Ahnung. Vielleicht compilieren die das im C++-Modus. Unis sind meiner Erfahrung nach ziemlich schlecht darin, das Handwerk des Programmierens zu lehren.
-
Danke, das funktioniert.