C 未定义结构成员变量-没有名为的成员

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. *

我在一个名为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.*/
};
它遇到了一个编译错误,我不知道为什么:

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正确声明的    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