我正在尝试实现一个简单的教师列表,它是一个动态的动态数组"讲师"对象。首先,我不允许使用STL和矢量等。目标是在堆上启动一个带有默认值的动态讲师数组,当需要添加讲师时,如有必要,展开arraysize。问题是无法使用默认大小初始化教师数组,因为讲师对象的大小也是动态的。有没有一个很好的方法来处理这个?
这是讲师班级
class Instructor{
private:
string title, firstName, lastName, telNo, roomNo, userName, eMail;
string courses[];
public:
Instructor();
Instructor(string, string, string, string, string, string, string, string);
string getTitle();
string getFirstName();
string getLastName();
string getTelNo();
string getRoomNo();
string getUserName();
string getEMail();
string getCourse(int courseIndex);
void setTitle(string);
void setFirstName(string);
void setLastName(string);
void setTelNo(string);
void setRoomNo(string);
void setUserName(string);
void setEMail(string);
void setCourse(string);
void print();
};
我尝试初始化数组的部分:
int size = 5;
Instructor *instructorList;
instructorList = new Instructor[size];
它会抛出错误:不允许包含未知大小数组的类型
答案 0 :(得分:3)
使用指针存储数组的地址。
而不是
string courses[];
使用
string *courses;
并将其初始化为
courses = new string[size_of_elements];
要扩展元素数量,您必须
courses
答案 1 :(得分:0)
创建一个与您的代码类似的简单示例。它工作正常。
class A {
private:
char *field;
public:
A() {};
A(char *field) : field(field) { }
char *getField() const {
return field;
}
};
int main() {
int size = 5;
A *aList = new A[size];
for (int i = 0; i < size; i++) {
aList[i] = A((char *) std::to_string(i).c_str());
std::cout << aList[i].getField();
}
return 0;
}
用它来修复错误