在Linux 2.4上使用pthread-出现“不完整类型”编译错误

|| 我正在使用Linux 2.4(为我的操作系统课程做硬件), 我想使用pthread来实现读写器锁。 在rw_lock.c中,我有:
#include <pthread.h>
#include <stdlib.h>
#include \"rw_lock.h\"

struct readers_writers_t
{
    int prio;
    int number_of_readers;
    pthread_cond_t no_readers;
    int number_of_writers;
    int number_of_waiting_writers;
    pthread_cond_t no_writers;
    pthread_mutex_t lock;
};

[functions...]
在rw_lock.h中,我有:
typedef struct readers_writers_t readers_writers;
在另一个C文件(链接列表的实现)中,我有:
#include \"rw_lock.h\"

struct LinkedList
{
    ListNode* head;
    ListNode* tail;
    readers_writers rwLock;
};

(and more functions,includes etc\').
我收到(一个)编译错误:   \“ rwLock的类型不完整\”。 我不知道为什么会收到此错误(或如何解决此错误...)。 感谢您的帮助,谢谢!     
已邀请:
您的链表C文件不了解ѭ3,它是在rw_lock.c文件中定义的。 您只需要将struct readers_writers_t移出rw_lock.c并移入rw_lock.h文件即可。 也许您不希望您的链表知道该结构。在这种情况下,应将“ 4”定义为指针(readers_writers * rwLock)。另一种选择是 使您的readers_writers typedef成为一个指针:
typedef struct readers_writers_t *readers_writers
这要求rw_lock.c中的函数为实际结构分配空间,因为这是唯一了解实际结构的文件。     
您需要将结构定义从源文件移动到头文件。 rw_lock.h应该是:
#ifndef  SOME_UNIQUE_STRING_MY_RW_LOCK_H
#define  SOME_UNIQUE_STRING_MY_RW_LOCK_H

#include <pthread.h>

struct readers_writers_t
{
    int prio;
    int number_of_readers;
    pthread_cond_t no_readers;
    int number_of_writers;
    int number_of_waiting_writers;
    pthread_cond_t no_writers;
    pthread_mutex_t lock;
};
typedef struct readers_writers_t readers_writers;

#endif
    

要回复问题请先登录注册