使用指针时不兼容的类型

时间:2015-06-02 08:31:33

标签: c pointers incompatibletypeerror

#include <stdio.h>
#include <stdlib.h>

typedef struct contact
{
    my_string name;
    my_string email;
    int age;
} contact;

typedef struct contact_array
{
    int size;
    contact *data;
} contact_array;

void print_contact(contact *to_print)
{
    printf("%s (%s) age %i\n", to_print->name.str, 
    to_print->email.str, to_print->age);
}

int main()
{
    int i;
    contact_array contacts = { 0, NULL };
    for(i = 0; i < contacts.size; i++)
    {
        print_contact(contacts.data[i]);
    }

    return 0;
}

我收到以下错误:

error: incompatible type for argument 1 of 'print_contact'
note: expected 'struct contact *' but argument is of type 'contact'.

我在其他地方宣布了my_string结构,我不认为这就是问题所在。我只是不确定如何获得打印过程调用和过程声明以匹配类型。

4 个答案:

答案 0 :(得分:5)

您的编译器告诉您将指针类型传递给print_contact函数,如下所示:

print_contact(&contacts.data[i]);

答案 1 :(得分:2)

更改

void print_contact(contact *to_print)

void print_contact(contact to_print)

或将其作为

传递
print_contact(&contacts.data[i]);

您传递的contacts.data[i]不是地址,而是数据块本身。

答案 2 :(得分:0)

    print_contact(contacts.data[i]);

应该是

    print_contact(&contacts.data[i]);

这是因为contacts.data的类型为struct contact *,而contacts.data[i]的类型为struct contact。因此,您可以传递contacts.data + i&contacts.data[i]。只是一个符号差异。

请注意:代码中未定义my_string,标准标头不包含此内容。

答案 3 :(得分:0)

您缺少参考:

    print_contact(&contacts.data[i]);