我的库(amqp C库)有一个名为amqp.h的.h文件,其中包含:
typedef struct amqp_connection_state_t_ *amqp_connection_state_t;
struct amqp_connection_state_t_ {
amqp_pool_t frame_pool;
amqp_pool_t decoding_pool;
amqp_connection_state_enum state;
int channel_max;
int frame_max;
int heartbeat;
amqp_bytes_t inbound_buffer;
size_t inbound_offset;
size_t target_size;
amqp_bytes_t outbound_buffer;
int sockfd;
amqp_bytes_t sock_inbound_buffer;
size_t sock_inbound_offset;
size_t sock_inbound_limit;
amqp_link_t *first_queued_frame;
amqp_link_t *last_queued_frame;
amqp_rpc_reply_t most_recent_api_result;
};
我正在尝试在我的本地测试程序中打印上述结构值:
amqp_connection_state_t state;
state = conn->getConnectionState( );
printf("Connection state values\n");
printf("Channel max: %d", state->channel_max);
printf("frame max: %d", state->frame_max);
printf("sockfd: %d", state->sockfd);
反过来,我收到以下编译错误:
amqpoc.cpp: In function âvoid* con(void*)â:
amqpoc.cpp:85: error: invalid use of incomplete type âstruct amqp_connection_state_t_â
../common/amqp.h:294: error: forward declaration of âstruct amqp_connection_state_t_â
amqpoc.cpp:86: error: invalid use of incomplete type âstruct amqp_connection_state_t_â
../common/amqp.h:294: error: forward declaration of âstruct amqp_connection_state_t_â
amqpoc.cpp:87: error: invalid use of incomplete type âstruct amqp_connection_state_t_â
../common/amqp.h:294: error: forward declaration of âstruct amqp_connection_state_t_â
amqpoc.cpp:88: error: invalid use of incomplete type âstruct amqp_connection_state_t_â
../common/amqp.h:294: error: forward declaration of âstruct amqp_connection_state_t_â
问题出在哪里?
答案 0 :(得分:2)
struct amqp_connection_state_t_
供内部使用。你不应该直接访问它。您的代码处理的amqp_connection_state_t类型为opaque handle
因此,您的帖子似乎不完全真实,struct amqp_connection_state_t_
声明不在您包含的标头文件中,它位于amqp_private.h
文件中,但您包含amqp.h
如果你想获得channel_max
,那就有一个访问功能:
printf("Channel max: %d", amqp_get_channel_max(state));
使用->sockfd
功能公开amqp_get_sockfd
成员。然而,->frame_max
似乎没有暴露,所以你无法获取它。
如果您还包含amqp_private.h
,您可能可以直接访问这些成员,请注意,如果在运行时使用不同版本的amqp库而不是标题,则会出现兼容性问题文件是为。
答案 1 :(得分:-1)
我认为问题出在以下方面:
state = conn->getConnectionState( );
您确定getConnectionState()
函数将返回amqp_connection_state_t类型。
当然,您应该使用state = (amqp_connection_state_t)conn->getConnectionState( );