[英]Passing structs to a void function
我的问题是如何将struct.variable(或struct数组)传递给void函数。 基本上,代码如下所示:
结构
struct Person{
string surname;
string BType;
string organ;
int age;
int year, ID, IDp;
} Patient[50], Donor[50];
int i; // counter variables for the arrays such as Patient[i].BType... etc
int i1;
然后该函数的代码是这样的一行:
void compare(int &i, int &i1, Person &Patient[50], Person &Donor[50]);
我试图通过i
, i1
, Patient
和Donor
结构。 为什么不起作用? 是否有将这些类型的结构传递给函数的特殊方法?
变量结构中的值也可以从文件中读取(不要认为此处会更改任何内容)。 有任何想法吗?
您的函数原型不正确。 要传递固定的数组类型引用,必须在数组索引声明之外限定参数的引用部分。
void compare(int &i, int &i1, Person (&Patient)[50], Person (&Donor)[50])
// note parens ----------------------^-------^-------------^------^
简单调用
compare(i, i1, Patient, Donor);
有趣的是,您可以使用模板来执行此操作,该模板可通过推导来保证固定数组的大小。
template<size_t N>
void compare(int &i, int &i1, Person (&Patient)[N], Person (&Donor)[N])
{
// N is guarenteed to be the size of your array. You can use it
// as you would 50 in your code.
for (size_t i=0; i<N;++i)
{
// do something with Patient and Donor elements
}
}
这具有允许以不同的数组大小实例化的附加好处。 即,您也可以这样做:
Person Patient[50], Donor[50];
Person MorePatients[10], MoreDonors[10];
....
compare(i, i1, Patient, Donor);
compare(i, i1, MorePatients, MoreDonors)
它将正确编译。 我建议您尝试一下,您可能会发现它很有用。
除了WhozCraig所说的以外,您甚至可以在其中放置可变参数模板参数,以传递在医院中可以找到的各种类型的事物,例如护士和助产士!
template <typename T1, size_t N1>
void compare(int &i, int &i1, T1 (&array)[N1]) {
for (const auto& elem : array) {
std::cout << elem.name << std::endl;
}
}
template <typename T1, size_t N1, typename... Ts, size_t... Ns>
void compare(int &i, int &i1, T1 (&array)[N1], Ts (&... arrays)[Ns]) {
for (const auto& elem : array) {
std::cout << elem.name << std::endl;
}
std::cout << std::endl;
compare(i, i1, arrays...);
}
struct Nurse
{ std::string name; };
struct Midwife
{ std::string name; };
int main() {
Nurse nurses[] = {{"Nina"}, {"Austin"}};
Midwife midwives[] = {{"Matriona"}, {"Lizbeth"}, {"Jill"}};
Nurse evenMoreNurses[] = {{"Maria"}, {"Nick"}, {"Martine"}, {"Ashley"}};
int i{};
int i1{};
compare(i, i1, nurses, midwives, evenMoreNurses);
}
您现在意识到C ++会多么有趣吗?
只是这样声明函数:
void compare(int i, int i1, Person *Patient, Person *Donor);
您可以像这样调用:
比较(i,i1,患者,供体)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.