Ожидаемое первичное выражение до токена ']'? - PullRequest
0 голосов
/ 05 ноября 2019

Я пытаюсь вызвать функцию с вектором, и по какой-то причине он говорит «ожидаемое первичное выражение перед ']». Вектор может содержать любое количество файлов, в зависимости от количества чисел в myfile,так что я не уверен, что я должен положить туда.

#include <fstream>
#include <string>
#include <vector>
#include <iostream>

using namespace std; // not recommended

double averageCalc(string[],int);

int main () {
    double average;
    string line;
    ifstream myfile ("array_pgmdata.txt");
    //int index = 0;            // not needed
    //string myArray[index];    // UB - if it even compiles, it's a VLA of size 0.

    std::vector<std::string> myArray;    // use this instead to be able to grow it
                                         // dynamically

    if (myfile)                          // open and in a good state
    {
        // while (! myfile.eof() )       // It'll not be eof when you've read the last line
                                         // only when you try to read beynd the last line,
                                         // so you'll add "line" one extra time at the end
                                         // if you use that. Use this instead:
        while(getline(myfile, line))
        {
            // myArray[index++] << line; // you have 0 elements in the array and
                                         // can't add to it in any way
            myArray.push_back(line);
        }
    }
    else cout << "Unable to open file"; 

    for(size_t idx=0; idx < myArray.size(); ++idx) {
        std::cout << myArray[idx] << "\n";
    }


    average = averageCalc(myArray[], line); // error here

    return 0;
}

double averageCalc(string nums[], int count)
{
    int a, total, elements, averaged1, averaged2;
//  string averaged2;
    for(a = 0; a < count; a++)
    {
        total+=a;
        elements++;
    }
    averaged1 = total / elements;

    return averaged2;
}

Ответы [ 2 ]

0 голосов
/ 05 ноября 2019

Я думаю, что ошибка возникает, потому что сначала вы создаете массив с std::vector<std::string> myArray;, поэтому данные имеют строковый тип, но когда вы хотите вычислить среднее значение, функция ожидает значения int, double и т. Д. Для выполнения математических операций. Измените строку на int или используйте функцию для ее преобразования:

int main() 
{
    string s = "12345"; 

    // object from the class stringstream 
    stringstream geek(s); 

    // The object has the value 12345 and stream 
    // it to the integer x 
    int x = 0; 
    geek >> x; 

    // Now the variable x holds the value 12345 
    cout << "Value of x : " << x; 

    return 0; 
}
0 голосов
/ 05 ноября 2019

Здесь есть несколько проблем. Во-первых, ваша функция averageCalc ожидает параметр типа string[], который является массивом строк. Когда вы вызываете функцию, вы пытаетесь передать ей std::vector<string>, которая не является массивом строк, это класс. Предположительно, вы захотите изменить свою функцию так, чтобы она содержала вектор, например:

double averageCalc( const std::vector<string> & nums ); // no need for size now

Другая проблема, с которой вы сталкиваетесь, - это вызов вашей функции. Когда вы вызываете его, вы передаете myArray[] в качестве параметра, что является ошибкой, которую дает вам компилятор. Это неверный синтаксис, вы просто хотите передать myArray.

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