2016-04-26 25 views
0

我的程序有语法错误:错误:递归调用“预期的表达”

Expected expression

我是新来的递归;我希望我做对了。

#include <iostream> 
void vvodmas(int a[],int n); 
int poisk(int a[],int n,int min , int i); 
int poiskmin(int a[], int n); 
int main() 
{ int n;int i; 
    int a[i]; 
    std::cout<<"massiv: "; 
    vvodmas(a,n); 
    std::cout<<std::endl; 
    std::cout<<"minimum"<< poiskmin(a[],n);  // here is the problem 

} 
void vvodmas(int a[],int n) 
{ std::cout<<"n?"; 
    std::cin>>n; 
    for (int i=0;i<n;i++) 
    std::cout<< a[i]<<" "; 
} 
int poisk(int a[], int n,int min, int i) 
{ 
    if (i<n) 
    { if (a[i]<min) 
    min=a[i]; 
    i++; 
    poisk(a,n,min,i); 
    } 
else 
    return min; 

} 
int poiskmin(int a[], int n) 
{ 
    return poisk(a, n, a[0], 0); 
} 
+1

欢迎来到StackOverflow。请阅读并遵守帮助文档中的发布准则。 [最小,完整,可验证的示例](http://stackoverflow.com/help/mcve)适用于此处。在您发布代码**和**准确描述问题之前,我们无法有效帮助您。最重要的是,你需要包含整个错误信息。这将包括编译器意识到您遇到问题的行号和位置。 – Prune

回答

0

你不需要[]通过apoiskmin;当声明a时,需要告诉编译器a是一个数组。之后,编译器不需要提醒。

0

问题出在a []。你的逻辑需要传递整个数组,而不仅仅是一个未指定的元素。您只需要a这里。

一旦添加了括号,编译器就会期望您尝试传递一个元素。你没有告诉它哪个元素(在括号内)。这就是为什么它抱怨失踪的表达:它被寻找像a [0]


顺便说一句,该错误信息,我从GCC得到的是

a.c:11: error: expected primary-expression before ‘]’ token 

注意位置信息是如何在发现错误非常有帮助。

0

实际问题是在线,

std::cout<<"minimum"<< poiskmin(a[],n);  // here is the problem 

校正线是

std::cout<<"minimum"<< poiskmin(a,n) ; 

[]具有穿过整个阵列时,所述功能作为一个参数被去除,[]将用于当你想发送一个特定的数组元素到函数,就像你在下面的语句中所做的那样。

return poisk(a, n, a[0], 0); 

除了这些,你的程序还有一些其他的循环漏洞。

1。总是最好初始化变量。

int n = 0 ; 
int i = 0 ; 

2。您正在分配数组的值和vvodmas(a,n);函数内的数组长度。

但是变量的作用域是通过值传递给函数的,函数中的值不会被填充,也不会反映到调用者的部分,所以传递值作为函数的参考。