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

C++: Passing array of structs to functions by reference

本文关键字:数组 函数 结构 引用 C++      更新时间:2023-10-16

请不要标记为重复,虽然有与我类似的问题,但它们要么使用指针回答,没有解决与我相同的问题,要么它们与语言 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 的定义下方,我有上面函数的匹配函数原型。

我做错了什么?

编辑:有人将这个问题标记为另一个问题的副本; 事实并非如此。我正在上编程课的入门,正如我在上面明确指出的那样,我不能使用指针。猜猜另一个问题用什么?一个指针。看到区别了吗?此外,在更实际的层面上,我已经尝试了将对象的动态数组传递给函数中推荐的解决方案,但它对我不起作用,因为我无法在另一个问题中发表评论,所以我必须问一个新问题。我会等到我能问我的教授,格拉齐。

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

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

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

StructA a1[10];
StructA a2[15];
FunctionA(a1);
FunctionA(a2);

使用以下语法:

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

使用模板将启用不同尺寸的功能,回答者: 詹姆斯·鲁特

然后,您可以按如下方式使用该函数:

StructA a[10];
StructA b[20];
FunctionA(a);
FunctionA(b);