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

时间:2014-10-03 18:25:19

标签: 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.            */
#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

2 个答案:

答案 0 :(得分:2)

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

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 :(得分:0)

花了一些时间后,我想出了以下声明:

#undef sin_zero
http://svn.pjsip.org/repos/pjproject/trunk/pjlib/include/pj/compat/socket.h中的

导致了问题。我在这里张贴这个,以便它可以帮助其他人遇到与PJSIP相同的问题。