我正在尝试在结构内部创建函数,到目前为止,我有以下代码:

typedef struct client_t client_t, *pno;
struct client_t
{
        pid_t pid;
        char password[TAM_MAX]; // -> 50 chars
        pno next;

        pno AddClient()

        {
            /* code */
        }

};

int main()
{

    client_t client;

    //code ..

    client.AddClient();

}

错误:client.h:24:2:错误:预期在“{” token 之前的“:”,“,”,“;”,“}”或“属性”。

哪个是正确的方法?

最佳答案

它不能直接完成,但是您可以使用函数指针并显式传递“this”参数来模拟同一件事:

typedef struct client_t client_t, *pno;
struct client_t
{
        pid_t pid;
        char password[TAM_MAX]; // -> 50 chars
        pno next;

        pno (*AddClient)(client_t *);
};

pno client_t_AddClient(client_t *self) { /* code */ }

int main()
{

    client_t client;
    client.AddClient = client_t_AddClient; // probably really done in some init fn

    //code ..

    client.AddClient(&client);

}

事实证明,这样做并不能真正给您带来很多好处。这样,您将不会看到以这种样式实现的许多C API,因为您可能只需调用外部函数并传递实例即可。

08-19 17:52