簡體   English   中英

將結構傳遞給void函數

[英]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]);

我試圖通過ii1PatientDonor結構。 為什么不起作用? 是否有將這些類型的結構傳遞給函數的特殊方法?

變量結構中的值也可以從文件中讀取(不要認為此處會更改任何內容)。 有任何想法嗎?

您的函數原型不正確。 要傳遞固定的數組類型引用,必須在數組索引聲明之外限定參數的引用部分。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM