我是C的菜鸟,需要一些帮助才能让我的代码......欢迎......做任何事情。我将以下内容放入.h文件中。
typedef struct
{
int active;
int dead;
ucontext_t t;
struct node *link;
}gtthread_t;
struct node{
struct gtthread_t thread;
};
typedef struct
{
int rubic;
}gtthread_mutex_t;
这是一个.h文件......一个.h文件,我不得不#include ucontext.h ...我知道我也不应该这样做...但这是我能做的唯一方法访问ucontext_t,我发现。
所以,我的错误是“字段线程类型不完整”。
为什么呢?那有什么意思?如果我想在.h文件中使用那种数据声明结构,我怎么可能不能导入ucontext.h?
答案 0 :(得分:2)
与您的其他内容无关。这与您的第一个结构是匿名的并且类型名称为gtthread_t
的事实有关。与C ++不同,C区分gtthread_t
和struct gtthread_t
。
命名结构:
struct gtthread_t
{
int active;
int dead;
ucontext_t t;
struct node *link;
};
或者将类型名称更改为typedef:
struct node{
gtthread_t thread;
};
答案 1 :(得分:0)
ucontext.h
标头仅预先声明ucontext_t
类型。你只应该使用指针,因为它的大小是未知的。将您的代码更改为:
ucontext_t *t;
你会没事的。请注意,ucontext.h
标头中的所有函数都使用此类指针来引用上下文。这在C API设计中很常见,因为它允许将表示隐藏在API的实现中,这很好。
答案 2 :(得分:0)
一个问题是struct node
尚未宣布,因此gtthread_t
类型无法完成。
typedef struct
{
int active;
int dead;
ucontext_t t;
struct node *link;
}gtthread_t;
struct node{
struct gtthread_t thread;
};
您需要struct node
的正向声明:
struct node;
typedef struct
{
int active;
int dead;
ucontext_t t;
struct node *link;
}gtthread_t;
struct node{
struct gtthread_t thread;
};
尝试一下,看看它是否有所作为。