[英]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.