C++调用含结构体数组参数的函数报错:expected primary expression before ']' token
问题分析与解决
嗨,我一眼就看到你代码里的问题啦!编译器报错的根源就在函数调用的传参写法上。
错误原因
在main函数里你写了:
Insertion(a[],7);
这是完全不符合C++语法的!当你把数组作为参数传递给函数时,只需要直接写数组名a就可以了——数组名在函数参数传递场景下会自动退化为指向数组第一个元素的指针,刚好匹配你定义的Insertion(CElem m[],int n)函数参数(这里的m[]本质上等价于CElem* m)。
编译器看到a[]时,会误以为你是在试图声明一个数组,但这是在函数调用的参数位置,语法完全不成立,所以才会抛出expected primary expression before ']' token这个错误。
修正后的代码
只需要把函数调用那一行改成下面这样就可以正常编译运行了:
#include <iostream> using namespace std; struct CElem { int key; }; CElem a[7]; void Insertion(CElem m[],int n) { CElem x; int i; int j; for (i = 0; i < n; i++) { x = m[i]; j = i-1; while (j >= 0 && x.key < m[j].key) m[j+1] = m[j--]; m[j+1] = x; } } int main() { a[0].key=32; a[1].key=45; a[2].key=128; a[3].key=4; a[4].key=-9; a[5].key=77; a[6].key=-7; // 修正这里,去掉[] Insertion(a,7); // 可以加上打印代码验证排序结果 for(int k=0;k<7;k++){ cout << a[k].key << " "; } cout << endl; return 0; }
额外小建议
你可以在排序后加上一段打印数组的代码,这样就能直观看到排序是否正确啦,我已经在上面的修正代码里加上了这部分内容~
内容的提问来源于stack exchange,提问作者A.Petrov
相关产品推荐
相关产品推荐

