我正在尝试使用名称" IExampleVtbl" 创建一个结构,该结构将包含指向我的函数的指针(SetStringPtr,GetStringPtr)成为另一个结构" IExample" 的一部分。
但我想将其他结构" IExample" 作为参数传递给函数(SetStringPtr,GetStringPtr)。
这是代码:
#include <windows.h>
#include <stdio.h>
typedef struct {
SetStringPtr *SetString;
GetStringPtr *GetString;
} IExampleVtbl;
typedef struct {
IExampleVtbl *lpVtbl;
DWORD count;
char buffer[80];
} IExample;
typedef long SetStringPtr(IExample *, char *);
typedef long GetStringPtr(IExample *, char *, long);
long SetString(IExample *this, char * str)
{
...
return(0);
}
long GetString(IExample *this, char *buffer, long length)
{
...
return(0);
}
正如您所看到的,第一个结构需要了解功能, 这些函数需要知道需要了解第一个结构的第二个结构。
我怎么能解决这个问题?
答案 0 :(得分:4)
您可以按照以下顺序解决问题
为了实现这一目标,您需要使用标签定义结构:
post '/posts/:id' do # Change delete to post
...
答案 1 :(得分:1)
您将转发声明与type-alias定义结合使用:
// Forward declaration of the structure IExample
// And at the same time definition of the type-alias IExample
typedef struct IExample IExample;
typedef long SetStringPtr(IExample *, char *);
typedef long GetStringPtr(IExample *, char *, long);
// Now the definition of the structures
typedef struct { ... } IExampleVtbl;
// Because the previous type-alias definition, we need to specify a structure tag
struct IExample { ... };
答案 2 :(得分:0)
typedef的结构为typedef&#39; d可以在struct的定义之前,所以稍微重新安排应该让事情在这里工作
typedef struct IExample IExample;
typedef long SetStringPtr(IExample *, char *);
typedef long GetStringPtr(IExample *, char *, long);
typedef struct {
SetStringPtr *SetString;
GetStringPtr *GetString;
} IExampleVtbl;
struct IExample {
IExampleVtbl *lpVtbl;
long count;
char buffer[80];
};