所以我在一本“加速C++”的书中做练习。但是,当我试图从书中重做代码时,Visual总是说重载函数grade的多个实例与参数列表匹配。但我看不出超载问题在哪里。有人能帮我吗?
grade.h
#ifndef GUARD_grade_h
#define GUARD_grade_h
#include <vector>
#include "student_info.h"
double grade(double, double, double);
double grade(double, double, const std::vector<double>&);
double grade(const Student_info &);
#endif // !GUARD_grade_hgrade.cpp
#include <vector>
#include <stdexcept>
#include "median.h"
#include "student_info.h"
#include "grade.h"
using std::domain_error; using std::vector;
double grade(double midterm, double final, double homeworks)
{
return 0.2 * midterm + 0.4 * final + 0.4 * homeworks;
}
double grade(double midterm, double final, const vector<double> hm)
{
if (hm.size() == 0)
throw domain_error("student has done no homework");
return grade(midterm, final, median(hm));
}
double grade(const Student_info& s)
{
return grade(s.midterm, s.final, s.homework); // this grade is saying that is more then one
//instance of overloaded function "grade"
}发布于 2021-06-24 12:33:10
grade() (以向量作为第三个参数)的第二个重载的声明和定义不匹配。声明有通过引用传递的向量,但是您的定义有值传递。在后者中,您遗漏了一个&。
就目前情况而言,当编译器看到grade(s.midterm, s.final, s.homework);调用(在上一次重载的定义中)时,它不知道要使用的两个‘可能’重载中的哪一个:通过引用或值传递s.homework?
https://stackoverflow.com/questions/68115760
复制相似问题