请不要标记为重复,虽然有类似的问题,我们要么使用指针回答,没有解决我遇到的相同问题,或者它们与语言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。答案 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);