Strukturproblem
-
Hi,
vornweg möchte ich mich für die dumme Frage entschuldigen, wenn s zu trivial ist. Habe jetzt seit Ewigkeiten C# benutzt und bin in C++ ein bisschen eingerostet.
Folgender Code:
typedef Message *(*IncomingMessageCallback)(Message*); typedef void *(*FreeMessageCallback)(Message*); typedef struct { public: DWORD id; char *name; DWORD parameterCount; BYTE **parameters; DWORD *parameterLengths; FreeMessageCallback *freeCallback; } Message;Wie ihr seht bezieht sich FreeMessageCallback auf Message und umgekehrt, was mein Compiler natürlich, verständlicherweise, nicht mag.
Kann ich das irgendwie umgehen oder muss ich mich von diesem Ansatz komplett verabschieden?
Vielen Danke

Greetz
M.T.
-
struct Message; typedef Message *(*IncomingMessageCallback)(Message*); typedef void *(*FreeMessageCallback)(Message*); struct Message { DWORD id; std::string name; std::vector<BYTE> params; FreeMessageCallback* pFreeCallback; Message() : id(0), pFreeCallback(NULL) {} };... forward declaration ...
-
Vergiss Strukturdefinitionen per typedef, das ist in C++ ein Anachronismus.
struct Message; typedef Message *(*IncomingMessageCallback)(Message*); typedef void *(*FreeMessageCallback)(Message*); struct Message { public: DWORD id; char *name; DWORD parameterCount; BYTE **parameters; DWORD *parameterLengths; FreeMessageCallback *freeCallback; };
-
So einfach? Herrlich ^^
Das mit der Forward declaration hatte ich auch im Hinterkopf, wurde aber durch das typedef ausgehebelt. Werde versuchen mir s in Zukunft abzugewöhnen. Danke für den Tipp
@(D)Evil: Die std-Klassen hätte ich auch gern verwendet. Ist aber für ne Klassenbibliothek, die auch per C#-Interop zugänglich sein muss - von daher würde das die Sache nur verkomplizieren. Trotzdem danke, dass du dir so viel Mühe gemacht hast

Greetz und schönen Abend noch
M.T.