我已经尝试为学生信息(姓名,IDno和学位)写一个班级,这些信息将被打印在屏幕上;但我不知道错误在哪里?!
#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;
}
答案 0 :(得分:2)
显然,您有以下问题:
Student s1, s2;
这会尝试调用default constructor
。但是,您定义了一个带有3个参数的构造函数,这会禁止编译器为您生成默认构造函数,因此您将无法创建这些对象,这会使您的后续成员函数调用失败。
s1.setName(Sara);
setName
将char
类型作为参数类型,如果您的意思是字符串文字"Sara"
,那么您将遇到麻烦。在其他函数调用中可以找到类似的问题。你应该解决这个问题。
与此同时,您应该更喜欢使用member initialization list
而不是在构造函数体中使用赋值来初始化您的成员。
Student::Student(char n,int id,char d): name(n), idnumber(id), degree(d){}
确保您的成员按name, idnumber, degree
的顺序声明。
答案 1 :(得分:1)
char是单个字符,而不是字符串。尝试使用std :: string代替。
另外,要声明一个字符串文字,用引号括起你的字符串“” 例如:
s1.setName("Sara");
另外,要使用std :: string,您需要#include <string>
答案 2 :(得分:0)
您的代码存在一些问题
char name;
name这里只是一个char文字,所以当你尝试将字符串Sara传递给它时,它只会存储一个文字。因此,将名称更改为数组或指针
char name[10] or char *name
同时传递名字时会传递双引号,例如“Sara”。将函数中的所有形式参数更改为char数组或指针。
Student s1, s2;
这里创建对象s1和s2时,它将调用默认构造函数,你没有提供,所以在代码中包含默认构造函数
Student(){}
s1.setDegree(A);
这里你试图传递一个文字而不是一个变量,所以引用它
s1.setDegree('A');
C ++提供了字符串数据类型,它很容易用于char或char [],所以使用它。您可以像使用其他数据类型(如int,double)一样对其进行操作。 这将避免您使用strcpy()复制字符串来指定数组长度的麻烦。
string name;