gpt4 book ai didi

c - sys/queue.h错误: request for member in something not a structure or union (TAILQ)

转载 作者:行者123 更新时间:2023-11-30 15:16:59 24 4
gpt4 key购买 nike

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

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

我将其精简为仅队列处理行,但我遇到了相同的错误,这是 header 的来源:

#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;
}

回溯引用行 TAILQ_INSERT_HEAD(&queue, &data,entries);,如果使用 TAILQ_INSERT_TAIL 则具有相同的效果。

我不知道为什么它没有编译。我查了this question的答案并且提供的示例编译得很好。我很难发现差异/我做错了什么。

任何帮助将不胜感激。

最佳答案

我对 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;
}

关于c - sys/queue.h错误: request for member in something not a structure or union (TAILQ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32792995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com