Глобальная переменная не распознана - PullRequest
0 голосов
/ 17 января 2020

Я написал функцию, которая получает массив с плавающей запятой x и выполняет с ним некоторые операции. Размерность этого массива определяется количеством строк в файле. Чтобы автоматизировать этот процесс, я написал функцию, которая читает файл и возвращает количество строк.

 int dim(){
 unsigned int number_of_lines = 0;
 FILE *file = fopen("prod.txt", "r");
 int ch;

 while (EOF != (ch=getc(file)))
     if ('\n' == ch)
         ++number_of_lines;

 return number_of_lines;
 }

Затем я объявляю это значение глобальной переменной:

 const int numofdims = dim();

Однако, когда я вызываю функцию cost в main (после инициализации массива x[numofdims] )

 float cost(x[numofdims]){
     int i,j;
     float v = 0;
     vector<float x_in;
     vector<float x_origin;
     for(i=0;i<numofdims;i++){
         x_origin.push_back(x[i]);
         x_in.push_back(x[i]);
    // does several calculations
    // ...
      return v;
 }

 int main(){

  float x[46] = {1.92215242,   6.27128854,   9.53873027,  14.79595426,
     18.92807696,  25.85703415,  29.93216819,  33.84737516,
     42.19055   ,  48.81144008,  60.99963933,  63.34494338,
     67.69622093,  73.07859412,  80.46676915,  85.10451921,
     87.49178446,  92.34202212,  96.37983996,  98.90903662,
    101.99359444, 106.88409251, 113.81421998, 120.42050161,
    124.43256197, 126.96629951, 133.88193576, 139.48952166,
    149.57054363, 155.55769723, 159.66096967, 167.09857013,
    173.4584723 , 176.70360324, 181.43200013, 182.80392359,
    185.65336252, 187.64028963, 191.06631673, 193.69478216,
    198.94720133, 202.68384665, 209.7697676 , 212.26092809,
    219.06840905, 221.61314655};
 printf("%d", numofdims);
 float v = cost(x);
 }

Я получаю ошибки

 array bound is not an integer constant before ‘]’ token
 float cost(float x[numofdims]){

 array_param.cpp: In function ‘float cost(...)’:
 array_param.cpp:232:28: error: ‘x’ was not declared in this scope
      x_origin.push_back(x[i]);

Однако, если вместо присвоения dim () переменной numofdims я выполняю

 const int numofdims = 46;

, где 46 - это количество строк одного из файлов, которые я хочу прочитать, функция работает именно так, как я ожидал. В обоих случаях объявления numfodims (с помощью dim () или числовой атрибуции), когда я печатаю

 printf("%d", numofdims);

, я получаю значение 46. Почему это происходит и как я могу предотвратить это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...