在c ++上创建动态数组时出错

时间:2018-03-21 15:10:21

标签: c++

我对我的作业有疑问。我写了一个Student类,它的构造函数只包含一个学生的id和名字。这是构造函数和get方法:(我不会将其他部分放在相关的位置)

#include <iostream>
#include "SimpleStudent.h"
using namespace std;

Student::Student(const int sid , const string sname ) {
    studentId = sid;
    studentName = sname;
}
string Student::getStudentName() {
    return studentName; 
} 

void Student::operator=(const Student &right) {
    if (&right != this) {
        if (studentId != right.studentId) {
            studentId = right.studentId;
        }
        if (studentName != right.studentName) {
            studentName = right.studentName;
        }
    }
}

请注意,studentId和studentName分别在私有部分的标题中声明为int和string。

以下是测试部分:

#include <iostream>
#include "SimpleSRS.h"
using namespace std;
int main() {
    Student* x = new Student[1];
    Student* s1 = new Student(1,"er");
    x[0] = *s1;    
    cout << x[0].getStudentName() << endl;
    return 0;
}

当我运行上面的代码时,我收到以下错误:

在抛出'std :: logic_error'basic_string :: _ S_construct null无效的实例后调用终止

我无法弄清楚问题。谢谢

编辑:这是头文件:

#ifndef __SIMPLE_STUDENT_H
#define __SIMPLE_STUDENT_H
#include <string>
using namespace std;

class Student {
public:
    Student(const int sid = 0, const string sname = 0);
    Student();
    ~Student();
    Student(const Student &studentToCopy);
    void operator=(const Student &right);
    int getStudentId();
    string getStudentName();
private:
    int studentId;
    string studentName;
};
#endif

1 个答案:

答案 0 :(得分:2)

你失败了,因为你将null传递给std :: string的构造函数。这是不允许的。你在这里做到了

  Student(const int sid = 0, const string sname = 0);

还不清楚为什么你有2个构造函数

 Student(const int sid = 0, const string sname = 0);
    Student();

这些基本相同。

我会删除第一个。现在studentName将获得默认构造(空)