C 尝试返回指向头文件中正向声明的结构的指针时出错
在我正在处理的一个头文件中,有一个结构的前向声明,内容如下:C 尝试返回指向头文件中正向声明的结构的指针时出错,c,pointers,C,Pointers,在我正在处理的一个头文件中,有一个结构的前向声明,内容如下: typedef struct my_server_t my_server_t; my_server_t *server_create(); 以及一个函数,其内容如下: typedef struct my_server_t my_server_t; my_server_t *server_create(); 现在,在.c文件中,我正在尝试实现server\u create功能。这就是我正在做的: my_server_t* ser
typedef struct my_server_t my_server_t;
my_server_t *server_create();
以及一个函数,其内容如下:
typedef struct my_server_t my_server_t;
my_server_t *server_create();
现在,在.c
文件中,我正在尝试实现server\u create
功能。这就是我正在做的:
my_server_t* server_create(){
struct server {
unsigned short port;
int pending_connections_allowed;
} server_t;
return (gfserver_t *)server_t;
}
但是当我试图编译.c
代码时,我得到一个错误,它说:
error: operand of type 'struct server' where arithmetic or pointer type is required
我无法理解这里发生了什么。有人能告诉我,我怎样才能从
server\u create
类型的my\u server\u t*
返回一个结构,我只能推测这个函数应该做什么,但你似乎想分配一个新的my\u server\u t
结构并返回它。相反,您在函数中定义一个新结构并返回它,这是无效的
您想要的可能是:
my_server_t *server_create(void) {
my_server_t *srv = malloc(sizeof my_server_t);
if (srv == NULL)
return NULL; // Failed to allocate memory.
srv->port = /* some default value */;
srv->pending_connections_allowed = /* some default value */;
return srv;
}
如果需要,还可以将字段值作为参数传递:
my_server_t *server_create_with_values(unsigned short port, int pending) {
my_server_t *srv = malloc(sizeof my_server_t);
if (srv == NULL)
return NULL; // Failed to allocate memory.
srv->port = port;
srv->pending_connections_allowed = pending;
return srv;
}
随后在代码中,您可以使用以下函数:
my_server_t *foo = server_create();
// or
my_server_t *foo = server_create_with_values(1337, 0);
另外,当不再需要时,不要忘记释放分配的内存:
free(foo);
您尝试将结构强制转换为指针;这是不可能的。尝试
return(我的服务器*)&server\t代码>除此之外,你的命名很糟糕。您不应将server\u t
用作结构实例,\u t
后缀用于类型作为第三个问题,您不应返回指向本地存储的指针,该指针将在离开函数后失效。因此,虽然它在语法上是正确的,但当我这样做时,它会调用UBT,我得到一个错误,它说error:invalid application'sizeof'到一个不完整的类型'my_server_t'(又名'struct my_server_t')
@Amanda这是一个完全不同的问题。这意味着编译器没有看到struct my\u server\t
的任何定义。你应该先定义它。