需要帮助将结构数组传递给函数

时间:2018-10-30 22:20:22

标签: c++ arrays struct

所以,我目前正在学校学习,需要做作业。我是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;
}

问题是编译器在我尝试打印总和的行中向我显示错误。有人可以帮我吗?谢谢。

编辑:

我的编译器显示此错误:

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 :(得分:0)

double sum(double C[], int m);包含一个双精度数组,但是您只有一个listofpeople数组。这不起作用。

您必须更改sum,使其采用listofpeople的数组,或者将数据结构从“数组结构”更改为“结构数组”(性能更好,处理起来更复杂) )。

通常,sum需要重新实现:

double sum(listofpeople *s, int m);

请注意,在C ++中,我们不对类型使用[]表示法。