C++ C++,具有set和get函数的学生类

C++ C++,具有set和get函数的学生类,c++,class,object,C++,Class,Object,我试着为一个学生写一个班级的信息(姓名、ID号和学位),这些信息将打印在屏幕上;但我不知道错误在哪里 #include <iostream> #include <conio.h> using namespace std; class Student { private: char name; int idnumber; char degree; public: Student(char,int,char); void setNam

我试着为一个学生写一个班级的信息(姓名、ID号和学位),这些信息将打印在屏幕上;但我不知道错误在哪里

#include <iostream>
#include <conio.h>
using namespace std;

class Student {
private:
    char name;
    int idnumber;
    char degree;
public:
    Student(char,int,char);
    void setName(char n){name = n;}
    int getName(){return name;}
    void setIdnumber(char id){idnumber = id;}
    int getIdnumber(){return idnumber;}
    void setDegree(char d){degree = d;}
    int getDegree(){return degree;}
};
Student::Student(char n,int id,char d){
    name = n;
    idnumber = id;
    degree = d;
}

int main(){
    Student s1, s2;
    s1.setName(Sara);
    s1.setIdnumber(333);
    s1.setDegree(A);
    s2.setName(Jack);
    s2.setIdnumber(222);
    s2.setDegree(B);
    cout << "name: " << s1.getName() << ",IDnumber: " << s1.getIdnumber() << ",Degree: " <<      s1.getDegree() << endl;
    cout << "name: " << s2.getName() << ",IDnumber: " << s2.getIdnumber() << ",Degree: " << s2.getDegree() << endl;

    getch();
    return 0;
}
#包括
#包括
使用名称空间std;
班级学生{
私人:
字符名;
国际电话号码;
焦度;
公众:
学生(字符,整数,字符);
void setName(charn){name=n;}
int getName(){return name;}
void setIdnumber(字符id){idnumber=id;}
int getIdnumber(){返回idnumber;}
void setDegree(chard){degree=d;}
int getDegree(){return degree;}
};
学生::学生(字符n,int-id,字符d){
name=n;
idnumber=id;
度=d;
}
int main(){
学生s1、s2;
s1.设置名称(Sara);
s1.setIdnumber(333);
s1.凝结度(A);
s2.设置名称(杰克);
s2.设置识别号(222);
s2.凝结度(B);

coutchar是单个字符,不是字符串。请尝试改用std::string

此外,要声明字符串文字,请将字符串括在引号中“” 例如:


另外,要使用std::string,您需要
#include

字符是单个字符,而不是字符串。请尝试改用std::string

此外,要声明字符串文字,请将字符串括在引号中“” 例如:


另外,要使用std::string,您需要
#包括

显然,您有以下问题:

 Student s1, s2;
这将尝试调用
默认构造函数
。但是,您定义了一个包含3个参数的构造函数,这将禁止编译器为您生成默认构造函数,因此您将无法创建这些对象,这实际上会使后续成员函数调用失败

s1.setName(Sara);
setName
char
类型作为参数类型,如果您指的是字符串文字
“Sara”
,则您将遇到问题。在其他函数调用中也会发现类似问题。您应该解决此问题

同时,您应该更喜欢使用
成员初始化列表
,而不是使用构造函数体中的赋值来初始化您的成员

  Student::Student(char n,int id,char d): name(n), idnumber(id), degree(d){}

请确保您的成员按
姓名、ID号码、学位的顺序声明。显然,您有以下问题:

 Student s1, s2;
这将尝试调用
默认构造函数
。但是,您定义了一个包含3个参数的构造函数,这将禁止编译器为您生成默认构造函数,因此您将无法创建这些对象,这实际上会使后续成员函数调用失败

s1.setName(Sara);
setName
char
类型作为参数类型,如果您指的是字符串文字
“Sara”
,则您将遇到问题。在其他函数调用中也会发现类似问题。您应该解决此问题

同时,您应该更喜欢使用
成员初始化列表
,而不是使用构造函数体中的赋值来初始化您的成员

  Student::Student(char n,int id,char d): name(n), idnumber(id), degree(d){}

确保按照
名称、ID号、学位的顺序声明您的成员

您的代码几乎没有问题

char name; 
Student(){}

s1.setDegree(A);
这里的name只是一个char文本,所以当您试图将字符串Sara传递给它时,它将只存储一个文本。所以将name更改为array或pointer

char name[10] or char *name
同样,在传递名称时,使用双引号传递它,如“Sara”。将函数中的所有形式参数更改为char数组或指针

Student s1, s2;
在这里,当创建对象s1和s2时,它将调用默认构造函数,这是您没有提供的,所以在代码中包括默认构造函数

char name; 
Student(){}

s1.setDegree(A);
这里您试图传递的是一个文本,而不是一个变量,所以请引用它

s1.setDegree('A');
C++提供了字符串数据类型,很容易使用wrt to char或char[],所以使用它。您可以像使用int、double等其他数据类型一样对其进行操作。 这将避免您使用strcpy()复制字符串来指定数组长度的麻烦

string name;

您的代码几乎没有问题

char name; 
Student(){}

s1.setDegree(A);
这里的name只是一个char文本,所以当您试图将字符串Sara传递给它时,它将只存储一个文本。所以将name更改为array或pointer

char name[10] or char *name
同样,在传递名称时,使用双引号传递它,如“Sara”。将函数中的所有形式参数更改为char数组或指针

Student s1, s2;
在这里,当创建对象s1和s2时,它将调用默认构造函数,这是您没有提供的,所以在代码中包括默认构造函数

char name; 
Student(){}

s1.setDegree(A);
这里您试图传递的是一个文本,而不是一个变量,所以请引用它

s1.setDegree('A');
C++提供了字符串数据类型,很容易使用wrt to char或char[],所以使用它。您可以像使用int、double等其他数据类型一样对其进行操作。 这将避免您使用strcpy()复制字符串来指定数组长度的麻烦

string name;

你几乎什么都没告诉我们。我们知道错误的地方比你少。请你说一下编译器所说的错误和哪条线是生成它的。我会重新阅读一本C++编程的书,因为你在代码中有很多错误。你几乎什么都没告诉我们。我们知道错误的地方比你少。请把错误和什么帖出来。E编译器说,它正在生成它。我会重新阅读一本关于C++编程的书,因为你在代码中有很多错误。“萨拉”是字符串文字,无法传递给接受
char
的成员函数。哦,我甚至没有看到所有这些…好像他们甚至没有通过编译器运行过。也许他们只是需要正确的代码,他们认为使用它作为错误解析器比安装编译器更容易……”Sara“是字符串文字,无法传递给接受
char
的成员函数。哦,我甚至没有看到所有这些…好像他们甚至没有通过编译器运行过。也许他们只是需要正确的代码,他们认为使用它作为错误解析器比安装编译器更容易。。。