2017-01-05 5 views
1

Der folgende Code verursacht mehrere FehlerFehler von typedef struct

typedef struct 
{ 
    char name[20]; 
    int vertices_qty; 
    int polygons_qty; 
    Vector3D vertex[MAX_VERTICES]; 
    Triangle polygon[MAX_POLYGONS]; 
    TexCoord mapcoord[MAX_VERTICES]; 
    int id_texture; 
    obj_type, *obj_type_ptr; 
} 

speziell die letzte Zeile:

obj_type, *obj_type_ptr; 

, wenn ich über obj_type mit der Maus schweben heißt es:

dieses Deklaration hat keine Speicherklasse oder Typspezifizierer

gibt es auch eine Warnung, die lautet:

unmarkiert 'Struktur' erklärt, keine Symbole

all dies innerhalb einer commons.h Header-Datei ist, die mehrere stucts wie vector2d, vector3d definiert, material usw. für ein Programm, das openGL verwendet

Was muss ich tun, damit der Fehler verschwindet?

+3

Vielleicht loswerden 'typedef struct' und stattdessen' struct Your_Name'? Die 'typedef Struktur 'ist ein Holdover von' C' und ist nicht notwendig in 'C++'. – PaulMcKenzie

+1

Verschieben Sie diese geschweifte Klammer um eine Zeile nach oben. –

Antwort

7

Sie wollen wahrscheinlich

typedef struct 
{ 
    char name[20]; 
    int vertices_qty; 
    int polygons_qty; 
    Vector3D vertex[MAX_VERTICES]; 
    Triangle polygon[MAX_POLYGONS]; 
    TexCoord mapcoord[MAX_VERTICES]; 
    int id_texture; 
} obj_type, *obj_type_ptr; 

als obj_type und obj_type_ptr sind die neuen Typen, und sie haben nach der schließenden Klammer der typedef struct{...} TYPE_HERE; angegeben werden. Beachten Sie, dass in C++ Sie kein typedef benötigen, können Sie einfach definieren kann

struct obj_type{...}; 

dann verwenden wie

obj_type foo; // object of type obj_type 
obj_type* foo_ptr; // pointer to obj_type 
+0

Es wäre eine Verbesserung für Ihre Frage, wenn Sie neben der Lösung auch das eigentliche Problem im Code angeben (Außerdem nette und schnelle Antwort). –

2

einfach die letzten beiden eine gültige Art geben. Der Fehler bedeutet, dass Sie eine Variable angegeben haben, die keinen existierenden Typ hat oder keinen Typ spezifiziert hat. also nach Ihrer Lösung:

typedef struct 
{ 
    char name[20]; 
    int vertices_qty; 
    int polygons_qty; 
    Vector3D vertex[MAX_VERTICES]; 
    Triangle polygon[MAX_POLYGONS]; 
    TexCoord mapcoord[MAX_VERTICES]; 
    int id_texture; //Fine until the next line 
    obj_type, *obj_type_ptr; //Compiler says: "Where is the type D:?" 
} 

einfach die Typen vor Ihrer Struktur erklären (nicht wissen, welche genau Sie gemeint):

struct obj_type{...}//I'm a nice struct 

Und Ihre struct das ändern:

typedef struct 
{ 
    char name[20]; 
    int vertices_qty; 
    int polygons_qty; 
    Vector3D vertex[MAX_VERTICES]; 
    Triangle polygon[MAX_POLYGONS]; 
    TexCoord mapcoord[MAX_VERTICES]; 
    int id_texture; 
    obj_type *obj_type_ptr; //Now it's correct 
}