gcc 4.7.2
c89
こんにちは、
ポインターを構造体へのポインターに逆参照しようとしていますが、次の操作を行うとこのエラー メッセージが表示されます。
LOG_INFO("CHANNEL ID --- %d", *channel->id);
コンパイルエラー
request for member ‘id’ in something not a structure or union
正しいポインター型にキャストしようとしても、同じエラー メッセージが表示されます。
LOG_INFO("CHANNEL ID --- %d", (*(channel_t*)channel->id));
新しい変数を宣言し、構造体が指しているアドレスを割り当てることで問題を解決しました。
channel_t *ch = NULL;
ch = *channel;
LOG_INFO("CHANNEL ID --- %d", ch->id);
最初の 2 つの方法がなぜ失敗したのか疑問に思っています。
ご提案いただきありがとうございます。
構造:
typedef struct tag_channel channel_t;
struct tag_channel {
size_t id;
char *name;
};
私がそれを呼んでいる方法:
channel_t *channel = NULL;
channel = (channel_t*)apr_pcalloc(mem_pool, sizeof *channel);
LOG_CHECK(job_queue_pop(queue, &channel) == TRUE, "Failed to pop from the queue");
そして機能、私は問題を抱えています:
apr_status_t job_queue_pop(apr_queue_t *queue, channel_t **channel)
{
apr_status_t rv = 0;
channel_t *ch = NULL;
rv = apr_queue_pop(queue, (void**)channel);
if(rv != APR_SUCCESS) {
char err_buf[BUFFER_SIZE];
LOG_ERR("Failed to pop from the queue %s", apr_strerror(rv, err_buf, BUFFER_SIZE));
return FALSE;
}
ch = *channel;
LOG_INFO("CHANNEL ID --- %d", ch->id);
LOG_INFO("CHANNEL NAME - %s", ch->name);
return TRUE;
}