我试图将数组传递给函数,但我得到了这个奇怪的错误
const int size = 2;
void foo(short (&a)[size]){
cout << a;
}
void testSequence(short a[size]){
foo(a);
}
错误:从'short int *'类型的表达式初始化'short int(&amp;)[4]'类型的引用无效
答案 0 :(得分:1)
当您声明函数参数时,
short a[size]
你要声明一个指针,而不是一个数组:
[dcl.fct]确定后 每个参数的类型,“数组T”或函数类型T的任何参数都被调整为“指向T的指针”。
foo(short (&a)[size])
需要引用大小为size
的数组。指针不能转换为一个。
答案 1 :(得分:1)
声明
void testSequence(short a[size]);
与
相同void testSequence(short a[]);
与
相同void testSequence(short* a);
因此,通话
foo(a);
来自该功能无效。
为了能够使用
foo(a);
你必须使用:
void testSequence(short (&a)[size]){
foo(a);
}
该行
cout << a;
foo
中的也不正确。 <<
运算符没有重载,允许将对int
s数组的引用写入cout
。您可以使用:
for ( size_t i = 0; i < size; ++i )
{
std::cout << a[i] << std::endl;
}