“short int(&)”类型的引用无效初始化

时间:2018-03-10 06:29:37

标签: c++

我试图将数组传递给函数,但我得到了这个奇怪的错误

const int size = 2;
void foo(short (&a)[size]){
  cout << a;
}
void testSequence(short a[size]){
  foo(a);
}

错误:从'short int *'类型的表达式初始化'short int(&amp;)[4]'类型的引用无效

2 个答案:

答案 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;
}