Ошибка компоновки E0530 с «{..}» для агрегатного объекта - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь создать массив размером 'i' здесь, где i определен ранее (полный код внизу)

double studentScores[] = new double[i];

Однако я продолжаю получать следующую ошибку:

ожидается инициализация с {...}.

Я попробовал метод указателя, который, похоже, не работает с остальной частью моего кода. Буду признателен за любую помощь, спасибо за ваше время.

int main()
{
    ifstream inData;                //input file stream variable
    ofstream outData;           //output file stream variable

    inData.open("Data.txt");        //open data file
    outData.open("testStatistics.out");

    int i = 0;
    while (inData.eof() == false)   //while you have not reached the end of the file
    {
        i++;                            //i == size of the class
    }
    double studentScores[] = new double[i];     //creates an array of the size of the number of inputs

    for (int j = 0; j < i; j++)
    {
        inData >> studentScores[j]; //read in student scores
    }

    double average1 = average(i, studentScores);
    double median1 = median(i, studentScores);

    int distribution[10] = { 0 };
    for (int v = 0; v < i; v++)         //increment distribution appropriately
    {
        int h = scoresDistribution(v, studentScores);
        distribution[h] ++;
    }

    outData << "There are " << i << "scores available." << endl;
    outData << "The average is : " << average1 << endl;
    outData << "The median is : " << median1 << endl;
    outData << "The detailed grade distribution is as follows : " << endl;

    outData << fixed << left;
    outData << setfill(' ') << setw(10) << "range" << setw(10) << " # of Students" << endl;
    int z = 100;
    int y = 90;
    for (int f = 0; f < 10; f++)
    {
        outData << setfill(' ');
        outData << setw(10) << "[" << z << " - " << y << "]";
        outData << distribution[f] << endl;
        z = z - 10;
        y = y - 10;
    }

    inData.close(); //close input data file
    outData.close(); //close output data file

    cout << "Press any key to quit…" << endl;

    cin.ignore(50, '\n');
    return 0;
}

1 Ответ

0 голосов
/ 30 апреля 2018
double studentScores[] = new double[i];

Это недействительно C++. Это похоже на жестокий C++ / Java гибрид.

Здесь нельзя создать массив в стеке, поскольку для этого требуется фиксированный размер, известный во время компиляции.

Лучший способ в современном C++ - использовать std::vector:

std::vector<double> studentScores;
studentScores.resize(i);

Если вы должны использовать new, вы должны использовать указатель, потому что new возвращает:

double* studentScores = new double[i];

Обратите внимание, что необходимо освободить эту память самостоятельно, когда вы закончите ее использовать:

delete[] studentScores;

В любом случае, если ", похоже, не работает с остальной частью моего кода" , вам нужно исправить оставшуюся часть кода. Вы можете задать для этого отдельный вопрос или воспользоваться поиском, чтобы найти вопрос, который может вам помочь.

...