首页 > 解决方案 > 不能将类对象数组传递给函数?

问题描述

我正在尝试使用一个函数来计算平均成绩并将字母等级存储到“字母”中。但是,每当我尝试调用该函数时,我都会收到一条错误消息,提示“没有匹配对“findAvg”的调用。我不完全理解引用和指针。这是问题所在吗?感谢任何帮助和信息,谢谢。

#include <iostream>
#include <fstream>

using namespace std;

class Student{
 public:
  double grades[4];
  float avgGrade;
  string letter;
  string name;
};

void findAvg(Student f[]);

int main(){
  Student students[3];
  int i = 0;
  fstream fin;
  fin.open("input1.txt");
  while(!fin.eof()){
    fin >> students[i].name;
    for (int j =0; j < 4;++j){
      fin >> students[i].grades[j];
    }
    i += 1;
  }
  fin. close();
  findAvg(students[3]);
  cout << students[1].letter;
}

void findAvg(Student f[]){
  for(int i = 0;i<3;++i){
    f[i].avgGrade = ((f[i].grades[0] + f[i].grades[1] + f[i].grades[2] + f[i].grades[3]) /4);
    if (f[i].avgGrade>=90){
      f[i].letter = "A";
    } else if (89>f[i].avgGrade && f[i].avgGrade<=80){
      f[i].letter = "B";
    } else if (79>f[i].avgGrade && f[i].avgGrade<=70){
      f[i].letter = "C";
    } else if (69>f[i].avgGrade && f[i].avgGrade<=60){
      f[i].letter = "D";
    } else {
      f[i].letter = "F";
    }
  }
}

标签: c++functionclassparameter-passing

解决方案


findAvg(students[3]);

应该

findAvg(students);

array[SIZE]通过使用(其中 SIZE 是数组的大小)引用整个数组的想法是一个常见的新手错误。我猜它来自数组声明表达式之间的混淆。但是声明和表达式不是一回事,适用不同的规则。在表达式中array[n]总是引用数组的一个元素。此外,如果n与数组的大小相同,那么您正在引用一个不存在的元素。

students[i].grades[j];奇怪的是,例如,您在代码的每个其他部分都完美地正确处理了数组。但是由于某种原因,当您调用该findAvg函数时,您认为适用不同的规则。


推荐阅读