C++ C++;类,基本重载错误

C++ C++;类,基本重载错误,c++,class,C++,Class,我正在尝试制作一个程序,使一个名为student的类成为一个学生ID,一个分数数组,以及一个显示数组中有多少个分数的数字。该类应该具有成员方法,这些方法输入学生ID号,输入单个考试成绩并更新输入的成绩总数,计算平均成绩并显示学生ID,然后显示平均成绩。这是到目前为止我的代码 #include <iostream> using namespace std; class Student { public: int StudentID; double Grades[5]

我正在尝试制作一个程序,使一个名为student的类成为一个学生ID,一个分数数组,以及一个显示数组中有多少个分数的数字。该类应该具有成员方法,这些方法输入学生ID号,输入单个考试成绩并更新输入的成绩总数,计算平均成绩并显示学生ID,然后显示平均成绩。这是到目前为止我的代码

#include <iostream>

using namespace std;

class Student
{
public:
    int StudentID;
    double Grades[5];
    int NumberOfGrades;

    // Member functions declared here
    int setID(int id);
   double setGrades(double g[5]);
   double getAverage(void);
};

// make them functions work, son.


int Student::setID(int ID)
{
    cout << "Please enter in the student's ID number: ";
    cin >> ID;
    return 0;
}

double Student::setGrades(double g[5])
{
    for (int i = 0; i < 5; i++)
    {
        cout << "Please enter in grade number " << i ;
        cin >> g[i];
        NumberOfGrades++;
    }
    return 0;
}

double Student::getAverage(void)
{
    int sum = 0,average;  // declare what I need in average
    for (int i = 0; i < 5; i++)
    {
        sum = sum + Grades[i];
    }
    average = sum / NumberOfGrades;

    cout << "The average for " << StudentID << " is " << average;
    return 0;
}


int main ()
{
    Student Student1;

    Student1.setID; //  error
    Student1.setGrades; //  error
    Student1.getAverage();

}
#包括
使用名称空间std;
班级学生
{
公众:
国际学生;
双级[5];
国际职系数目;
//此处声明的成员函数
int setID(int id);
双设定等级(双g[5]);
双倍平均(无效);
};
//让他们发挥作用,孩子。
int Student::setID(int ID)
{
cout>ID;
返回0;
}
双学生::设置成绩(双g[5])
{
对于(int i=0;i<5;i++)
{
coutg[i];
NumberOfGrades++;
}
返回0;
}
双人学生::getAverage(无效)
{
int sum=0,average;//声明我需要的平均值
对于(int i=0;i<5;i++)
{
总和=总和+等级[i];
}
平均值=总和/等级数;

cout首先,您需要实际调用这些函数:

Student1.setID -> Student1.setID()
Student1.setGrades -> Student1.setGrades()
但这还不够,这些函数需要参数(分别为int和double[5])。因此:

不过,这只会删除编译器错误。也许您看不到这一点,但您的函数实现不正确:

int Student::setID(int ID)
{
    cout << "Please enter in the student's ID number: ";
    cin >> ID; //you fill ID, which is a temporary variable!
    return 0;
}

我发现代码有几个主要问题:

int Student::setID(int ID)
{
    cout << "Please enter in the student's ID number: ";
    //ID is local. Assigning any value to it will have no effect on the class
    cin >> ID;
    //You might as well not return anything if the function is purely impure
    return 0;
}
请注意,我们正在为StudentID指定一个作为参数传入的值。请使用类似于:

//In main
Student student;
int newStudentID = 1234;
student.setID(newStudentID);

请发布确切的错误。您使用的编译器是什么?
setID
setGrades
都接受参数,但您没有提供任何参数。这就是我得到的确切错误..\src\Gav.cpp:57:16:error:statement无法解析重载函数Student1.setID的地址;//error^..\src\Gav.cpp:58:20:error:statement无法解析重载函数Student1.setGrades的地址;//错误^I我正在使用Eclipse IDE和MIN GW编译器,我想……另外,您的设置根本没有做任何事情。它们正在修改局部变量(不是类的成员),然后返回一个伪数字。我认为当我创建成员函数时,我允许用户使用cinYes输入单个参数,但是:1)在这种情况下不需要该参数,2)不设置此值,只将其保存在临时变量中,类成员保持不变。请参阅更新的答案。其他函数也在中实现正确。我明白了。有点。因此,如果我理解正确,我必须实现用户在我的main中输入的内容,而不是实际的函数?很抱歉,这些天真的问题,我才刚刚开始学习如何编码。@ThomasPham通常,任何函数都应该有一个作业。您可以有一个设置ID的函数,也可以有另一个设置ID的函数要求用户提供一个ID。使用一个同时具有这两种功能的函数是不好的做法,因为该函数的功能变得非常有限。如果您已经有了一个ID,并且只想设置它而不向用户要求它,该怎么办?请注意参数:
(int-ID)
函数顶部的部分是您传递数据的地方。ID是您想要设置学生ID的部分,StudentID是您想要设置的部分。@ThomasPham另一个例子是getGrades函数。函数应该返回平均值,而不是从函数内部使用
cout
直接显示成绩t可以在其他地方显示。再说一次,如果你想得到平均值而不直接显示它呢?你当前的代码不允许这样做。啊,我明白了。所以对于我的setGrades函数,我必须以某种方式将一个数组复制到函数中。我需要解释的全部内容在这些函数中几乎无法解释注释。请不要对此生气,但您需要在编写代码之前进行更多的研究。具体来说,请查找参数/参数以了解它们的工作原理。简短回答您的问题:是的,您可以传递数组,但有更好的方法来实现相同的目标。
int Student::setID(int ID)
{
    cout << "Please enter in the student's ID number: ";
    //ID is local. Assigning any value to it will have no effect on the class
    cin >> ID;
    //You might as well not return anything if the function is purely impure
    return 0;
}
void Student::setID(int ID)
{
    StudentID = ID;
}
//In main
Student student;
int newStudentID = 1234;
student.setID(newStudentID);