1

ここでタスクをチェーンしようとしていますが、Linux で GCC を使用してコンパイルすると、警告が表示されます: 互換性のないポインター型からの割り当て [デフォルトで有効]。私は同じタイプのポインタを扱っているだけですが。

typedef struct
{
    void (*routine)(void*);
    void* data;

    struct p_task* next;
    struct p_task* prev;

    int deadline;
    int timeWaiting;
}p_task;
typedef struct 
{   
    pthread_t mainThread;   

    pthread_t* threadArray;
    int threadCount;

    p_task* firstInLine;
    p_task* lastInLine;
}p_pool;


void pool_add_task(p_pool* pool, void* routine, void* data)
{   
    // create new task
    p_task* task = malloc(sizeof(p_task));
    task->routine = routine;
    task->data = data;
    task->deadline = 5;
    task->timeWaiting = 0;

    // when no tasks are chained yet
    if (pool->firstInLine == NULL) 
    {
        pool->firstInLine = task;
        pool->lastInLine = task;
    }
    else
    {       
        pool->lastInLine->next = task; // bad line 1
        task->prev = pool->lastInLine; // bad line 2
        pool->lastInLine = task; // new task is last in line
    }
}
4

1 に答える 1

5

これstruct p_taskは、構造体の定義で使用しないため、前方宣言されているためです。つまり、コンパイラはそれを認識していません

  1. それはまったく存在します

  2. 型と同一 (typdefフィード) であることp_task

これを書く必要があります:

typedef struct p_task
{
    // etc.
} p_task;
于 2013-02-23T09:21:03.363 に答える