没有定义结构成员变量 - 没有成员命名
问题描述:
我有一个名为sock.h定义的结构:没有定义结构成员变量 - 没有成员命名
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);
}
它:
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文件中引用运行到编译错误,我不知道为什么:
In function 'pj_sockaddr_in_init':
sock_common.c:error: 'pj_sockaddr_in' has no member named 'sin_zero'
我的问题是如何可能被忽略的字段?结构中的其他字段是可见的,可以被引用。有什么想法吗?如果有兴趣的项目源代码:
答
花了一些时间,我想通了即以下声明:
#undef sin_zero
in http://svn.pjsip.org/repos/pjproject/trunk/pjlib/include/pj/compat/socket.h引起的问题。我在这里发布此信息,以便它可以帮助其他人处理与PJSIP相同的问题。
答
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;
+1支持这个,在同一个头文件中的'pj_sockaddr_in6'实际上是通过'typedef struct pj_sockaddr_in6 {....} pj_sockaddr_in6来正确声明的;''''如果有的话,在** C **编译器上构建它。它*将*通过C++编译器按原样构建。 – WhozCraig 2014-10-03 18:54:24