无法确定要通过的正确参数

时间:2014-11-13 19:22:04

标签: c struct

我正在尝试调用函数start_thread()。我要传递的两个参数是void函数send和portId 0的地址。但是我一直收到错误 预期'struct port_t *'但参数的类型为'struct port_t *'threads.h。为什么我会收到此错误?

typedef struct port_t {
    int port[N];
    semaphore_t producer, consumer, mutex;
    int id;
} port_t;

int main()
{
    port_t id[100];


    int x;
    for(x =0; x < 100; x++)
    {
        createPort(id[x], x);
    }


    start_thread(send, &id[0]);
}

int send(port_t temp)
{
     while (1){
    printf("Port %d: trying to send\n", temp.id);
    P(&temp.consumer);
       P(&temp.mutex);
       printf("Port %d: sending message\n", temp.id);
       V(&temp.mutex);
    V(&temp.producer);
    return 1;
     }

}


void start_thread(void *function, struct port_t *port) //getting the message for this line
{
    printf("In main: creating thread\n");
    struct stack * stackP = (struct stack*)malloc(8192);
    tcb = (struct TCB_t *)malloc(sizeof(struct TCB_t));
    init_TCB (tcb, function, stackP,  8192, port);
    tcb->val = port->id;
    add_to_list( &ptr, &tcb);
}

2 个答案:

答案 0 :(得分:1)

使您的结构定义如下。不要忘记预先宣布这些功能。在使用struct port_t的任何地方使用port_t。

typedef struct {
    int port[N];
    semaphore_t producer, consumer, mutex;
    int id;
} port_t;

答案 1 :(得分:-1)

这......

void *function

...是一个对象指针,而不是一个函数指针。要声明一个接受与send()函数兼容的函数指针作为参数的函数,你可以这样做......

void start_thread(int (*function)(port_t), struct port_t *port) { // ...

......或者......

void start_thread(int (*function)(struct port_t), struct port_t *port) { // ...

。但是,我确实发现你的send()函数的签名有点可疑。将指针传递给结构体更为常见,而不是传递结构本身(按值)。