Почему я получаю ошибку при печати указателя на структуру?

0

Моя библиотека (библиотека 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_â

Где, вероятно, проблема? Пожалуйста помоги.

  • 0
    Это должен быть код C или C ++. Выберите один.
  • 0
    Мы используем библиотеку rabbitmq C, поверх которой есть оболочка C ++. Тестовый код, выдающий ошибки, компилируется как код C ++
Показать ещё 11 комментариев
Теги:

2 ответа

2
Лучший ответ

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 во время выполнения, чем для файлов заголовков.

  • 0
    Спасибо, это помогает.
0

Я думаю, что проблема в команде ниже:

state = conn->getConnectionState( );

Вы уверены, что функция getConnectionState() вернет тип amqp_connection_state_t. Конечно, вы должны использовать state = (amqp_connection_state_t)conn->getConnectionState( );

  • 0
    Добавление приведений здесь не имеет отношения к ошибкам компилятора.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню