C 未定义结构成员变量-没有名为的成员
我在一个名为sock.h的文件中定义了一个结构:C 未定义结构成员变量-没有名为的成员,c,struct,packaging,pjsip,C,Struct,Packaging,Pjsip,我在一个名为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. *
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.*/
};
它遇到了一个编译错误,我不知道为什么:
In function 'pj_sockaddr_in_init':
sock_common.c:error: 'pj_sockaddr_in' has no member named 'sin_zero'
我的问题是,一个字段怎么可能被忽略?结构中的其他字段可见,可以引用。有什么想法吗
PS:项目源代码(如果感兴趣):C结构类型实际上将结构作为其名称的一部分。函数定义应该是(基于结构定义) 但是,在声明中只使用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;
typedef结构
{
#如果定义了(PJ_SOCKADDR_HAS_LEN)&&PJ_SOCKADDR_HAS_LEN!=0
请忽略这一点*/
pj_uint8_t sinu_家庭;/**<地址家庭*/
#否则
pj_uint16_t sinu_家庭;/**<地址家庭*/
#恩迪夫
pj_uint16_t sinu_port;/**<传输层端口号*/
pj_in_addr sin_addr;/**
花了一段时间后,我发现以下语句:
#undef sin_zero
这是问题的根源。我在这里发布这篇文章是为了帮助其他人在PJSIP中遇到同样的问题。+1为了支持这一点,同一标题中的
pj_sockaddr_in6
实际上是通过typedef struct pj_sockaddr_in6{..]pj_sockaddr_in6正确声明的在我看来,负责这件事的人很少在C编译器上构建它。它将通过C++编译器来构建。
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;
#undef sin_zero