关于C++重载问题(编译器提示:错误 1 error C2661: “student::student”: 没有重载函数接受 3 个参数)

设计一个学生类student,除了包括no(学号)、name(姓名)和deg(成绩)数据成员外,有两个静态变量sum和num ,分别存放总分和人数,另有一个构造函数,一个普通成员函数disp()和一个静态成员函数avg(),用于计算平均分。在主函数中,定义若干个学生对象,并初始化,包括学号、姓名、成绩,要求输出这些学生的数据并计算平均分。(提示,在构造函数和析构函数中要考虑静态变量num的变化。)
#include <iostream>
#include<string>
using namespace std;

class student
{
private:
static double sum;
static int num;
int no;
string name;
double deg;
public:
student():no(0),name("nobody"),deg(0)
{num++;sum+=deg;}
void display();
static double avg();
~student()
{ num--;sum-=deg;}
};
double sum=0;

double student::avg()
{
return sum/num;
}
void student::display()
{
cout<<"输出学生信息:"<<endl
<<"学号:"<<no<<endl
<<"姓名:"<<name<<endl
<<"成绩:"<<deg<<endl;
}
int main()
{
student s1(1001,"zhangsan",95.5),s2(1002,"lisi",92.5),s3(1003,"jane",88);
s1.display();
s2.display();
s3.display();
cout<<"avg"<<student::avg()<<endl
<<s2.avg()<<endl;
return 0;
}

你的student类只有缺省构造函数,没有带三个参数的构造函数,所以报错

还有点小问题,给你改了下:

#include <iostream>
#include<string>
using namespace std;
class student
{
private:
 static double sum;   //类中的静态成员变量仅仅是个声明,不是定义
 static int num;
 int no;
 string name;
 double deg;
public:
 student() :no(0),name("nobody"),deg(0)
 {
  num++;sum+=deg;
 }
 student(int n,string s,double d)    //要有带三个参数的构造函数
 {
  no=n;
  name=s;
  deg=d;
  num++;
  sum+=deg;
 }
 void display();
 static double avg();
 ~student()
 {
  num--;sum-=deg;
 }
};
double student::sum=0;   //这里的初始化才是静态成员变量的定义
int student::num=0;      //同上
double student::avg()
{
 return sum/num;
}
void student::display()
{
 cout<<"输出学生信息:"<<endl <<"学号:"<<no<<endl  <<"姓名:"<<name<<endl  <<"成绩:"<<deg<<endl;
}

int main()
{
 student s1(1001,"zhangsan",95.5),s2(1002,"lisi",92.5),s3(1003,"jane",88);
 s1.display();
 s2.display();
 s3.display();
 cout<<"avg"<<student::avg()<<endl  <<s2.avg()<<endl;
 return 0;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-05-09
student s1(1001,"zhangsan",95.5),s2(1002,"lisi",92.5),s3(1003,"jane",88);

student类没有这样的构造函数本回答被网友采纳
相似回答