C ++:通过引用将结构数组传递给函数

时间:2017-05-11 00:31:36

标签: c++ arrays struct

请不要标记为重复,虽然有类似的问题,我们要么使用指针回答,没有解决我遇到的相同问题,或者它们与语言C而不是C ++有关。

我正在尝试将一个结构数组传递给一个函数,但是当我尝试这样做时,我收到一个错误:declaration of ‘a’ as array of references。我认为问题可能在于编译器将其作为数组而不是作为结构读取它,但我不确定如何解决这个问题。

我已经定义了三个元素的结构:

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

在main中声明了这个结构:

StructA a[15]; 

我将它传递给这样的函数:

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

}

此外,在StructA的定义下面,我有上面函数的匹配函数原型。

我做错了什么?

编辑:有人将此问题标记为另一个问题的副本;它不是。我在编程类的介绍中,正如我清楚地说明的那样,我不能使用指针。猜猜其他问题用什么?一个指针。看到不同?此外,在更实际的层面上,我已经尝试了Pass a dynamic array of objects to function中推荐的解决方案,但它对我不起作用,因为我无法在另一个问题上发表评论,所以我不得不提出一个新问题。我会等到我可以问我的教授grazie。

2 个答案:

答案 0 :(得分: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,如下所示:Amadeus

使用模板将启用不同大小的功能,如:James Root

您可以按如下方式使用该功能:

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

FunctionA(a);
FunctionA(b);

答案 1 :(得分:1)

要通过引用传递任何大小的数组,您可以执行以下操作:

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

它会推断出数组的大小,因此您不需要每次都指定它。

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

FunctionA(a1);
FunctionA(a2);