Что означает эта ошибка: тип переменной размера, объявленный вне какой-либо функции

0

У меня есть функция, fx named и имеет две входные переменные в виде массива и 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;
}
  • 0
    Похоже, вы редактировали свой код, чтобы «исправить» его в ответе. Пожалуйста, не делайте этого. Это очень запутанно для людей, которые найдут это в будущем. Скорее исправьте свой пост комментариями о исправлении и или добавьте исправленную копию кода, оставляя оригинал.
Теги:
arrays

1 ответ

2
Лучший ответ

Поскольку массивы, переданные функции, на самом деле не имеют размер (переменный или другой), компилятор пытается передать вам переменную n как размер matris.

Просто удалите n из выражения double matris[n], оставив квадратные скобки пустыми.

[Обратите внимание, что код, выполняющий cin > n; double matris[n]; cin > n; double matris[n]; не соответствует стандартам C++ - C++ 14 представит такую концепцию, но для существующих C++ стандартов она не допускается - только GNU C++ и некоторые совместимые с GNU C++ компиляторы поддерживают эту конструкцию],

  • 0
    ти !!! первая проблема решена: D, но у меня сейчас ошибка: return fx (temp [n], x); Как: невозможно преобразовать double' to double *' для аргумента 1' to double fx (double *, double)'
  • 0
    Просто используйте return fx(temp, x); , но рассмотрите возможность обновления функции для получения размера массива в качестве параметра: double fx(int n, double matrix[], double x); , Глобальные переменные, такие как n , противны!
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню