首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Overloading_grade_program_accelerated_c++_book

Overloading_grade_program_accelerated_c++_book
EN

Stack Overflow用户
提问于 2021-06-24 12:27:06
回答 1查看 23关注 0票数 0

所以我在一本“加速C++”的书中做练习。但是,当我试图从书中重做代码时,Visual总是说重载函数grade的多个实例与参数列表匹配。但我看不出超载问题在哪里。有人能帮我吗?

grade.h

代码语言:javascript
复制
#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_h

grade.cpp

代码语言:javascript
复制
#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"
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-24 12:33:10

grade() (以向量作为第三个参数)的第二个重载的声明和定义不匹配。声明有通过引用传递的向量,但是您的定义有值传递。在后者中,您遗漏了一个&

就目前情况而言,当编译器看到grade(s.midterm, s.final, s.homework);调用(在上一次重载的定义中)时,它不知道要使用的两个‘可能’重载中的哪一个:通过引用或值传递s.homework

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68115760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档