我已经做了一段时间了,但我似乎无法弄明白。
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include "student.h"
using namespace std;
int numofstudents = 5;
Student ** StudentList = new Student*[numofstudents];
string tempLname = "smith";
StudentList[0]->SetLname(tempLname);
#include<iostream>
#include <string>
using namespace std;
class Student {
public:
void SetLname(string lname);
void returnstuff();
protected:
string Lname;
};
#include <iostream>
#include "student.h"
#include <iomanip>
#include <cctype>
#include <cstring>
#include <string>
using namespace std;
void Student::SetLname(string lname) {
Lname = lname;
}
我想要做的就是将Lname
设置为smith
但是当我运行我的程序时,它会在运行后没有告诉我错误而崩溃。
任何帮助将不胜感激!
答案 0 :(得分:2)
您的问题与使用字符串无关。它与使用指针有关。
Student ** StudentList=new Student*[numofstudents];
这会分配一个Student指针数组。它不分配Student对象数组。因此,在这行代码中,您有一个包含5个无效指针的数组。当您尝试访问它们时,这是一个问题,就好像它们指向Student对象一样:
StudentList[0]->SetLname(tempLname);
为了使该行有效,StudentList[0]
首先需要指向有效的Student
对象。您可以将其设置为现有对象:
Student st;
StudentList[0] = &st;
或者你可以分配一个新对象:
StudentList[0] = new Student;
否则摆脱额外的间接水平:
Student * StudentList=new Student[numofstudents];
...
StudentList[0].SetLname(tempLname);
但是为什么你会这样做呢?如果您需要Student
个对象的一维动态集合,请使用标准库中的sequence container,例如std::vector
。
答案 1 :(得分:0)
将Student ** StudentList=new Student*[numofstudents];
更改为
Student ** StudentList=new Student*[numofstudents];
for(int i = 0; i<numofstudents; i++)
StudentList[i] = new Student();
答案 2 :(得分:0)
您创建了指向Student的指针数组,但是数组的元素未初始化,因此任何元素的取消引用,特别是[0]都会导致崩溃。 使用“std :: vector StudentList(numofstudents);”而是在代码“StudentList [0] .SetLname(tempLname);”
中进行微小更改