Моя библиотека (библиотека amqp C) имеет.h файл с именем amqp.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_â
Где, вероятно, проблема? Пожалуйста помоги.
struct amqp_connection_state_t_
для внутреннего использования. Вы не должны получать к нему доступ напрямую. Тип amqp_connection_state_t, с которым работает ваш код, - непрозрачный дескриптор
Итак, кажется, что ваш пост не совсем правдивый, объявление 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
функция amqp_get_sockfd
. ->frame_max
похоже, не подвергается воздействию, поэтому вы не можете его получить.
Вероятно, вы можете получить прямой доступ к этим членам, если вы также amqp_private.h
, amqp_private.h
, что при этом вы будете иметь проблемы с совместимостью, если вы используете другую версию библиотеки amqp во время выполнения, чем для файлов заголовков.
Я думаю, что проблема в команде ниже:
state = conn->getConnectionState( );
Вы уверены, что функция getConnectionState()
вернет тип amqp_connection_state_t. Конечно, вы должны использовать state = (amqp_connection_state_t)conn->getConnectionState( );