【问题标题】:sys/queue.h error: request for member in something not a structure or union (TAILQ)sys/queue.h 错误:请求成员不是结构或联合(TAILQ)
【发布时间】:2015-09-26 02:23:38
【问题描述】:

我正在构建一个依赖队列的小文件实用程序,但在编译时出现错误:

error: request for member "entries" in something not a structure or union

我将它剥离为仅队列处理行,我得到了同样的错误,这是标题的来源:

#ifndef _tailq_test_h
#define _tailq_test_h

#include <stdlib.h>
#include <stdint.h>
#include <unistd.h>
#include <sys/queue.h>

struct tail_q {
    TAILQ_ENTRY(tail_q) entries;
    int item;
};

TAILQ_HEAD(tail_queue, tail_q);

static struct tail_queue queue;

int main();

#endif

对于程序:

#include <stdlib.h>
#include <stdint.h>
#include <unistd.h>
#include <sys/queue.h>
#include "tailq-test.h"

static struct tail_queue queue;

int main()
{
    struct tail_q *q_ptr;
    int data = 1;

    TAILQ_INIT(&queue);

    TAILQ_INSERT_HEAD(&queue, &data, entries);

    return 0;
}

traceback指的是TAILQ_INSERT_HEAD(&amp;queue, &amp;data, entries);这一行,如果用TAILQ_INSERT_TAIL代替,效果是一样的。

我不确定为什么它没有编译。我检查了this question 的答案,提供的示例编译得很好。我无法发现差异/我做错了什么。

任何帮助将不胜感激。

【问题讨论】:

  • 这就是我在上面的问题中引用的问题/答案。该示例可以编译,但我的代码没有,而且我无法分辨出不同之处。
  • 我觉得你应该仔细看看,有一些不同。我最初没有注意到您问题中的链接 - 抱歉

标签: c queue


【解决方案1】:

我对 TAILQ 不太熟悉,所以我查看了您可以在此处找到的源代码:http://www.gnu.org/software/mifluz/doc/doxydoc/queue_8h-source.html

这里是TAILQ_INSERT_HEAD的源代码:

#define TAILQ_INSERT_HEAD(head, elm, field) do {                        
         if (((elm)->field.tqe_next = (head)->tqh_first) != NULL)        
                 (head)->tqh_first->field.tqe_prev =                     
                     &(elm)->field.tqe_next;

如您所见,第二个参数elm 需要是一个结构,其中包含第三个参数作为成员(field)。

在您的情况下,您的第二个参数是int *,它没有您的错误消息指出的entries 成员。

据我了解,您必须传递一个 tail_q 结构作为您的代码编译的第二个参数。

编辑: 例如,下面的代码编译:

int main()
{
    struct tail_q q;
    int data = 1;
    q.item = data; // Include your data in your struct.

    TAILQ_INIT(&queue);

    TAILQ_INSERT_HEAD(&queue, &q, entries); // Notice that I am passing a tail_q pointer here.

    return 0;
}

【讨论】:

  • 谢谢!我全神贯注于“条目”,没有注意到我的错误出现在第二个参数中。
猜你喜欢
  • 1970-01-01
  • 2013-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多