0

我尝试为学生信息(姓名、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;
}
4

3 回答 3

2

显然,您有以下问题:

 Student s1, s2;

这将尝试调用default constructor. 但是,您定义了一个带有 3 个参数的构造函数,这会阻止编译器为您生成默认构造函数,因此您将无法创建这些对象,这实际上会使您的后续成员函数调用失败。

s1.setName(Sara);

setNamechartype 作为参数类型,如果您的意思是 string literal "Sara",那么您将遇到麻烦。类似的问题可以在其他函数调用中找到。你应该解决这个问题。

同时,您应该更喜欢member initialization list在构造函数主体中使用而不是使用赋值来初始化您的成员。

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

确保您的成员按name, idnumber, degree.

于 2013-05-30T03:41:24.823 回答
1

char 是单个字符,而不是字符串。尝试使用 std::string 代替。

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

s1.setName("Sara");

此外,要使用 std::string,您需要#include <string>

于 2013-05-30T03:41:14.237 回答
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++ 提供了字符串数据类型,它很容易使用 wrt 到 char 或 char[],所以使用它。您可以像使用其他数据类型(如 int、double)一样对其进行操作。这将避免您使用 strcpy() 复制字符串来指定数组长度的麻烦。

string name;
于 2013-05-30T04:25:32.963 回答