C ++ - Передача массива структурного типа в пользовательскую функцию - PullRequest
0 голосов
/ 24 сентября 2018

Я совершенно новичок в Stack OverFlow, поэтому извините, если я нарушаю какие-либо правила или неправильно задаю вопрос (я также был бы признателен за советы о том, как правильно задавать вопросы о переполнении стека).

В любом случае, поэтому я получаю эту ошибку

* "аргумент типа 'data *' несовместим с параметром типа 'data '."

когда я вызываю пользовательскую функцию weather в int main ().Я был бы признателен, если бы кто-нибудь взглянул на мой код и показал, что является причиной ошибки.Точно так же, как вы знаете, я в настоящее время прохожу вводный курс по основам программирования и еще не изучил классы и указатели.

Спасибо!

#include <iostream>
#include <string>


using namespace std;

const int SIZE = 2;

void weather(struct data array[], int SIZE, string months[]);

int main()
{
string months[12] = { "January", "February", "March", "April", "May", "June"
                "July", "August", "September", "October", "November", "December" };


struct data {
    double totalRainfall;
    double highTemp;
    double lowTemp;
    double avgTemp;
};

data annualWeather[SIZE]; 

//Asks user for total rainfall, high and low temperature, and calculates
//avg temperature of each month
for (int i = 0; i < SIZE; i++)
{
    cout << "What was the total rainfall in " << months[i]
        << "?" << endl;
    cin >> annualWeather[i].totalRainfall;

    //Prompts user for temperature high
    do
    {
        cout << "What was the temperature high in " << months[i]
            << "?" << endl;
        cin >> annualWeather[i].highTemp;

    } while (annualWeather[i].highTemp > 140);

    //Prompts user for temperature low
    do
    {
        cout << "What was the temperature low in " << months[i]
            << "?" << endl;
        cin >> annualWeather[i].lowTemp;
    } while (annualWeather[i].lowTemp < -100);

    annualWeather[i].avgTemp = (annualWeather[i].highTemp + annualWeather[i].lowTemp) / 2;
}

**weather(annualWeather, SIZE, months); <--THIS IS WHERE I SEE ERROR**

return 0;
}

void weather(struct data array[], int SIZE, string months[])
{
double avgRainFall = 0;
double totalAnnualRainFall = 0;
double annualHigh = 0;
double annualLow = 0;
double avgMonthlyTemp = 0;

//Calculates sum annual rain fall, total annual rain fall, and total average monthly temperature
for (int i = 0; i < SIZE; i++)
{
    avgRainFall += annualWeather[i].totalRainfall;
    totalAnnualRainFall += annualWeather[i].totalRainfall;
    avgMonthlyTemp += annualWeather[i].avgTemp;
}

//Calculates average annual rain fall and average annual monthly temperature
avgRainFall = avgRainFall / SIZE;
avgMonthlyTemp = avgMonthlyTemp / SIZE;

//Selection Sort of annualWeather[].highTemp
for (int index = 0; index < SIZE - 1; index++)
{
    //Find location of smallest element
    int smallestIndex = index;
    for (int location = index + 1; location < SIZE; location++)
        if (annualWeather[location].highTemp < annualWeather[smallestIndex].highTemp)
            smallestIndex = location;
    //Swap smallest element of annualWeather[].highTemp to front
    int tempSales = annualWeather[smallestIndex].highTemp;
    annualWeather[smallestIndex].highTemp = annualWeather[index].highTemp;
    annualWeather[index].highTemp = tempSales;

    //Swap smallest element of months[] to front
    string tempMonths = months[smallestIndex];
    months[smallestIndex] = months[index];
    months[index] = tempMonths;

}

//Displays average monthly rainfall, total annual rainfall, annual high, annual low,
//And average of the monthly temperature averages
cout << "The average monthly rainfall is " << avgRainFall << "." << endl
     << "The total rainfall for the year is " << totalAnnualRainFall << "."
     << endl << "The high temperature of the year is " << annualHigh << " during "
     << months[0] << endl << "The low temperature of the year is " << annualLow << " during "
     << months[2] << endl << "The average temperature of all the monthly averages is "
     << avgMonthlyTemp << ".";

cin.get(); cin.get();
}

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Для первого, пожалуйста, укажите ваши персональные типы данных в глобальном пространстве.Ваша проблема не в отправке массива в функцию.Проблема внутри вашей функции - вы отправляете им массив с именем массива, а внутри пытаетесь получить к ним доступ по имени из main.Просто переименуйте ваш параметр функции.

void weather(Data array[], int SIZE, string months[])
{
    double avgRainFall = 0;
    double totalAnnualRainFall = 0;
    double annualHigh = 0;
    double annualLow = 0;
    double avgMonthlyTemp = 0;

    //Calculates sum annual rain fall, total annual rain fall, and total average monthly temperature
    for (int i = 0; i < SIZE; i++)
    {
        avgRainFall += array[i].totalRainfall;
        totalAnnualRainFall += array[i].totalRainfall;
        avgMonthlyTemp += array[i].avgTemp;
    }

    //Calculates average annual rain fall and average annual monthly temperature
    avgRainFall = avgRainFall / SIZE;
    avgMonthlyTemp = avgMonthlyTemp / SIZE;

    //Selection Sort of annualWeather[].highTemp
    for (int index = 0; index < SIZE - 1; index++)
    {
        //Find location of smallest element
        int smallestIndex = index;
        for (int location = index + 1; location < SIZE; location++)
            if (array[location].highTemp < array[smallestIndex].highTemp)
                smallestIndex = location;
        //Swap smallest element of annualWeather[].highTemp to front
        int tempSales = array[smallestIndex].highTemp;
        array[smallestIndex].highTemp = array[index].highTemp;
        array[index].highTemp = tempSales;

        //Swap smallest element of months[] to front
        string tempMonths = months[smallestIndex];
        months[smallestIndex] = months[index];
        months[index] = tempMonths;

    }

    //Displays average monthly rainfall, total annual rainfall, annual high, annual low,
    //And average of the monthly temperature averages
    cout << "The average monthly rainfall is " << avgRainFall << "." << endl
        << "The total rainfall for the year is " << totalAnnualRainFall << "."
        << endl << "The high temperature of the year is " << annualHigh << " during "
        << months[0] << endl << "The low temperature of the year is " << annualLow << " during "
        << months[2] << endl << "The average temperature of all the monthly averages is "
        << avgMonthlyTemp << ".";

    cin.get(); cin.get();
}
0 голосов
/ 24 сентября 2018

struct data, объявленное в вашей функции main, отличается от struct data, использованного в прототипе вашей weather функции.

Переместите определение struct data из main в глобальное пространство имен, где-то перед тем, как использовать его для объявления weather.

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