#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
结构,我不认为这就是问题所在。我只是不确定如何获得打印过程调用和过程声明以匹配类型。
答案 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]);