Нужна помощь в передаче массива структуры в функцию - PullRequest
0 голосов
/ 31 октября 2018

Итак, я сейчас учусь в школе, и мне нужно делать домашнее задание. Я новичок в C ++ и каким-то образом компилятор показывает мне ошибку в моем коде. По сути, у меня есть файл .txt, в котором хранятся данные. Файл .txt выглядит примерно так:

5 
Petras         23.25   10.50
Rimas          125.40  1.20
Romas          55.00   1.00
Jurgis         1000.90 0.25
Algis          15.00   25.50

Первая строка показывает, сколько людей в списке у нас есть, поэтому я создал целое число n.

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

И проблема в том, что я пытаюсь найти сумму денег, которую они имеют в евро. Это мой код.

#define USE_MATH_DEFINES
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cmath>
using namespace std;

const int Cn = 100;
const int Cname = 15;
int n;

struct listofpeople {
    string name;
    double MoneyInOtherCurrency;
    double RateOfExchange;
    double MoneyInEuros;
};

listofpeople A[Cn + 1];

void data();
void ChangeCurrency();
double sum(double C[], int m);

int main () {

data();
ChangeCurrency();
cout << sum(A[].MoneyInEuros, n);

return 0;
}
//-------------------------------------------------------
void data(){
    ifstream is ("U2duom.txt");
    is >> n;
    char symbols[Cname + 1];
    for(int i = 1; i <= n; i++){
        is.ignore(80, '\n');
        is.get(symbols, Cname);
            A[i].name = symbols;
        is >> A[i].MoneyInOtherCurrency;
        is >> A[i].RateOfExchange;
    }
}
//----------------------------------------------------------
void ChangeCurrency(){
    for(int i = 1; i <= n; i++){
        A[i].MoneyInEuros = A[i].MoneyInOtherCurrency*A[i].RateOfExchange;
        cout << A[i].name << " " << A[i].MoneyInEuros << " " << 
A[i].MoneyInOtherCurrency << " " << A[i].RateOfExchange << endl;
    }
}
//---------------------------------------------------------------
double sum(double C[], int m){
    double a = 0;
    for(int i = 1; i <= m; i++){
        a= a + C[i];
    }
    return a;
}

И проблема в том, что компилятор показывает мне ошибку в строке, где я пытаюсь распечатать сумму. Кто-нибудь может мне помочь? Спасибо.

EDIT:

Мой компилятор показывает эту ошибку:

error: expected primary-expression before ']' token

Если я укажу элементы массива, которые я хочу использовать, например:

sum(A[n].MoneyInEuros, n);

Компилятор показывает эту ошибку:

cannot convert 'double' to 'double*' for argument '1' to 'double 
sum(double*, int)'

1 Ответ

0 голосов
/ 31 октября 2018

double sum(double C[], int m); принимает массив значений типа double, но у вас есть только массив listofpeople. Это не работает.

Вы должны изменить sum так, чтобы он занимал массив listofpeople, или вы изменили свою структуру данных со Структуры массивов на Массив структур (лучше для производительности, более сложный для обработки).

Как правило, sum требует переопределения:

double sum(listofpeople *s, int m);

Помните, что в C ++ мы не используем нотацию [] для типов.

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