gpt4 book ai didi

c - 结构成员变量未定义 - 没有命名的成员

转载 作者:太空宇宙 更新时间:2023-11-04 08:36:03 24 4
gpt4 key购买 nike

我在名为 sock.h 的文件中定义了一个结构:

struct pj_sockaddr_in
{
#if defined(PJ_SOCKADDR_HAS_LEN) && PJ_SOCKADDR_HAS_LEN!=0
pj_uint8_t sin_zero_len; /**< Just ignore this. */
pj_uint8_t sin_family; /**< Address family. */
#else
pj_uint16_t sin_family; /**< Address family. */
#endif
pj_uint16_t sin_port; /**< Transport layer port number. */
pj_in_addr sin_addr; /**< IP address. */
char sin_zero[PJ_SOCKADDR_IN_SIN_ZERO_LEN]; /**< Padding.*/
};

引用自 sock_common.c 文件:

PJ_DEF(pj_status_t) pj_sockaddr_in_init( pj_sockaddr_in *addr,
const pj_str_t *str_addr,
pj_uint16_t port)
{
PJ_ASSERT_RETURN(addr, (addr->sin_addr.s_addr=PJ_INADDR_NONE, PJ_EINVAL));

PJ_SOCKADDR_RESET_LEN(addr);
addr->sin_family = PJ_AF_INET;
pj_bzero(addr->sin_zero, sizeof(addr->sin_zero));
pj_sockaddr_in_set_port(addr, port);
return pj_sockaddr_in_set_str_addr(addr, str_addr);
}

它遇到了一个编译错误,我不知道为什么:

In function 'pj_sockaddr_in_init':
sock_common.c:error: 'pj_sockaddr_in' has no member named 'sin_zero'

我的问题是一个字段怎么可能被忽略?结构中的其他字段是可见的并且可以被引用。有什么想法吗?

PS:项目源代码,如果有兴趣:http://svn.pjsip.org/repos/pjproject/trunk

最佳答案

C 结构类型实际上将结构作为其名称的一部分。您的函数定义应该是(基于您的结构定义)

PJ_DEF(pj_status_t) pj_sockaddr_in_init( struct pj_sockaddr_in *addr,
const pj_str_t *str_addr,
pj_uint16_t port)

但是,在声明中使用 typedef 更为常见:

    typedef struct
{
#if defined(PJ_SOCKADDR_HAS_LEN) && PJ_SOCKADDR_HAS_LEN!=0
pj_uint8_t sin_zero_len; /**< Just ignore this. */
pj_uint8_t sin_family; /**< Address family. */
#else
pj_uint16_t sin_family; /**< Address family. */
#endif
pj_uint16_t sin_port; /**< Transport layer port number. */
pj_in_addr sin_addr; /**< IP address. */
char sin_zero[PJ_SOCKADDR_IN_SIN_ZERO_LEN]; /**< Padding.*/
} pj_sockaddr_in;

关于c - 结构成员变量未定义 - 没有命名的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26184594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com