这个错误意味着什么:在任何函数之外声明的变量大小类型

时间:2014-02-25 22:50:37

标签: c++ arrays

我有一个函数,fx已命名并且有两个输入变量作为数组和一个double,所以我写了这样的程序,我遇到了以下错误。问题在于输入数组的定义,但我不知道如何解决它。 另一个问题是,当我想用​​输入调用此fx函数时,如何将完整数组作为第一个输入变量 - fx(matris[n],x)

error : variable-size type declared outside of any function

代码:

#include<iostream>
using namespace std;
int n=1;
double y=1;
double x;
double fx(double matris[], double x){
double f = 0;
for(int i=0;i<n;i++)//e.g f(X)= 3x^2 + 2x -4 = 0 [3 2 -4]
{
        y = 1;
        for(int k = 0;k<n-i-1;k++){//temp: y = x*x*x or x*x or x ... (calcules powers)
        y = y*x;
        }       
        f = f+y*matris[i];// 3 * y((x*x)) + 2 * y((x)) +  -4* y(1)
}
return f;
}
double dif(double matris[], double x){
double temp[n];
temp[0] = 0;
for (int i=0;i<n;i++){
temp [i+1] = matris[i] * (n-i-1);
}
return fx(temp[n], x);
}
int main(){
//newton-raphson method to solve a equilibrium
cout << "please enter the degree of your equilibrium: ";
cin >> n;
double matris[n];
cout << "please enter your equlibruim array: ";
for(int i =0; i<n; i++)
cin >> matris[i];

//x = x0 - f(x)/f'(x);
x = 1;
fx(matris,x);

return 0;
}

1 个答案:

答案 0 :(得分:2)

由于传递给函数的数组实际上没有大小(变量或其他),因此编译器会将变量n作为matris的大小传递给您。

只需从n表达式中删除double matris[n],将方括号留空即可。

[请注意,执行cin > n; double matris[n];的代码不符合标准C ++ - C ++ 14将引入这样的概念,但对于现有的C ++标准,它是不允许的 - 只有GNU C ++和一些“GNU C ++兼容“编译器支持这种结构”。