#include
using namespace std;
#include
struct contacts
{
string name;
string sex;
int age;
string number;
string address;
};
void add(contacts * p[])
{
int k;
cout << "请选择存储位置:";
cin >> k;
cout << "请输入联系人的姓名:";
cin >> p[k-1]->name;
cout << "请输入联系人的性别:";
cin >> p[k-1]->sex;
cout << "请输入联系人的年龄:";
cin >> p[k-1]->age;
cout << "请输入联系人的号码:";
cin >> p[k-1]->number;
cout << "请输入联系人的住址:";
cin >> p[k-1]->address;
}
int main()
{
contacts list[1000];
add(list);
system("pause");
return 0;
}
main函数里的add(list)怎么不对了呀,报错说是"contacts *" 类型的实参与 "contacts **" 类型的形参不兼容
参考GPT和自己的思路:
问题出在定义函数add的形参类型上。add函数语句中的形参p是一个指向contacts结构体数组指针的指针,即contacts **p。而在main函数中,传入的实参是一个contacts结构体数组list,类型为contacts *。这两种类型是不兼容的,因此会报错。解决方法是将函数add的形参改为指向contacts结构体数组的指针,即contacts *p。修改后的add函数代码如下:
void add(contacts *p)
{
int k;
cout << "请选择存储位置:";
cin >> k;
cout << "请输入联系人的姓名:";
cin >> p[k-1].name;
cout << "请输入联系人的性别:";
cin >> p[k-1].sex;
cout << "请输入联系人的年龄:";
cin >> p[k-1].age;
cout << "请输入联系人的号码:";
cin >> p[k-1].number;
cout << "请输入联系人的住址:";
cin >> p[k-1].address;
}
参数不要加中括号,加了中括号,参数就是指针的指针类型啦
#include<iostream>
using namespace std;
#include<string>
struct contacts
{
string name;
string sex;
int age;
string number;
string address;
};
void add(contacts * p)
{
int k;
cout << "请选择存储位置:";
cin >> k;
cout << "请输入联系人的姓名:";
cin >> p[k-1]->name;
cout << "请输入联系人的性别:";
cin >> p[k-1]->sex;
cout << "请输入联系人的年龄:";
cin >> p[k-1]->age;
cout << "请输入联系人的号码:";
cin >> p[k-1]->number;
cout << "请输入联系人的住址:";
cin >> p[k-1]->address;
}
int main()
{
contacts list[1000];
add(list);
system("pause");
return 0;
}
add(list);
修改为
add(&list);