2017-05-11 211 views
-1

請不要標記爲重複的,雖然也存在類似的問題,但它們要麼使用指針來回答,要麼沒有解決我遇到的問題,要麼涉及語言C而不是C++。C++:通過引用將結構數組傳遞給函數

我想將一個結構數組傳遞給函數,但是當我嘗試這樣做時,出現錯誤:declaration of ‘a’ as array of references。我認爲這個問題可能在於編譯器將它讀取爲數組而不是結構,但我不知道如何解決這個問題。

我已經定義了三個元素的結構:

struct StructA { 
    string name; 
    float income; 
    int amount; 
} 

內聲明的主要這個結構:

StructA a[15]; 

和我將它傳遞給一個函數,像這樣:

void FunctionA(StructA& a[], int& count) { //& to pass by reference 

} 

此外,就在StructA的定義下面,我有上面函數的匹配函數原型。

我在做什麼錯?

編輯:有人將此問題標記爲另一個副本;不是這樣。我在介紹編程類,正如我明確指出的那樣,我不能使用指針。猜猜別的問題使用什麼?一個指針。看到不同?此外,在更實際的層面上,我已經嘗試了Pass a dynamic array of objects to function中推薦的解決方案,但它並不適用於我,因爲我無法對另一個問題發表評論,所以我必須提出一個新問題。我會等到我能問我的教授格拉茲。

+0

是否必須擁有一個數組?如果不嘗試聲明'StructA'的'std :: vector '並將'std :: vector &container'傳遞給你的函數。 –

回答

1

使用此語法:

void FunctionA(StructA (&a) [SIZE], int &count) 

SIZE應該在這種情況下被提及。

您的語法(void FunctionA(StructA &a [SIZE]))表示您傳遞參考數組(&)而不是對數組的引用。

您也可以使用模板與功能:

template <size_t Size> 
void FunctionA(StructA (&a) [SIZE]) 

你並不需要通過count,如果你的意思是它是數組的size如指出:艾瑪迪斯

使用模板會使不同大小的功能被作爲回答:詹姆斯根

您可以使用函數的計算方式如下:

StructA a[10]; 
StructA b[20]; 

FunctionA(a); 
FunctionA(b); 
+0

使用你的方法,但我得到一個新的錯誤:'參數'a'包括對未知界限數組的引用' – Matt

+0

@Matt:你應該使用SIZE。我編輯答案並使其更加詳細。 – Shadi

1

傳遞任何尺寸參照的數組,你可以這樣做:

template <size_t Size> 
void FunctionA(StructA (&a)[Size]) 

它會推斷出數組的大小,所以你不需要每次都指定。

StructA a1[10]; 
StructA a2[15]; 

FunctionA(a1); 
FunctionA(a2);