微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法将类对象数组传递给函数?

如何解决无法将类对象数组传递给函数?

我正在尝试使用一个函数来计算平均成绩并将字母成绩存储到“字母”中。但是,每当我尝试调用函数时,都会收到一条错误消息:“对“ 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";
    }
  }
}

解决方法

findAvg(students[3]);

应该是

findAvg(students);

使用array[SIZE](其中SIZE是数组的大小)引用整个数组的想法是一个常见的新手错误。我猜这是由于 array声明 expression 之间的混淆造成的。但是声明和表达式不是同一回事,并且适用不同的规则。在表达式array[n]中始终引用数组的 element 。而且,如果n与数组的大小相同,则表示引用的元素不存在。

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

,

尝试使用findAvg (students)而不是findAvg (students[3])students[3]会给您第四个学生,该学生不存在。

,

您的通话findAvg(students[3]);不正确。您已经定义了一个采用数组的函数,但是students[3]是单个Student对象,而不是数组。这也是一个错误,因为它试图访问数组边界之外的元素

尝试将其命名为

findAvg(students);
,

在这里您需要暂停对象数组 所以 用这个

findAvg(students);

代替使用

findAvg(students[3]);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。