Problem mit typedef struct {..} name; und class forwarding
-
Folgende Fehlermeldung VS2012:
`error C2371: 'tFrame' : redefinition; different basic types
api_user.h(4) : see declaration of 'tFrame'`
Was probiere ich:
In Api_User.h definiere ich eine Klasse
testdie einen Pointer tFrame verwaltet. Um die Abhaengigkeiten gering zu halten, deklariere ich die Klasse tFrame im voraus. Hintergrund: Nur diejenigen, die wirklich was mit tFrame machen moechten, muessen den entsprechenden Header inkludieren.#ifndef API_USER_H #define API_USER_H struct tFrame; class test { tFrame* ptr_; }; #endifUngluecklicherweise ist
tFrameals Datenelement einer externen C-Api in Api.h mittelstypedefwie folgt deklariert:#ifndef API_H #define API_H typedef struct { } tFrame; #endifWill ich nun beide benutzen, wirft der Kompiler obige Fehlermeldung.
#include "Api_User.h" #include "Api.h" int main() { return 0; }Wie sieht eine richtige forward Deklaration in diesem Fall (
typedef struct {..} name;) aus?
-
struct mytFrame; typedef mytFrame tFrame;Edit: vergisses...
-
Geht nicht. Was Du da hast, ist ein typedef auf ein anonymes struct. Typedefs kannst Du nicht vorwärts deklarieren. Du brauchst eine nicht anonyme struct.
-
Du müsstest hier wohl
void*oder einen typsicheren Wrapper darum herum benutzen.Kommt
tFramein Api_User.h sonst noch vor?
-
Als Workaround könntest Du vielleicht auch von dem Typedef ableiten, und dann den dabei entstehenden Typen benutzen. Ich bin mir aber gerade nicht sicher, ob das Verhalten noch definiert ist, wenn Du Objekte vom abgeleiteten Typen in das C-API gibst...
-
Ich dachte mir schon, das es nicht geht, leider. Ableiten moechte ich nicht. Die aktuelle alternative ist
void*und dabei wird es wohl oder uebel bleiben. Danke fuer die Vorschlage.