C++ 尝试执行cin>&燃气轮机;字符串[array]并且存在错误(“字符串下标超出范围”)

C++ 尝试执行cin>&燃气轮机;字符串[array]并且存在错误(“字符串下标超出范围”),c++,C++,守则: class DataBase { private: int age, stuNumNew; string stuName, command; string ver = "Alpha"; float stuNum = 1; public: void Start() { cout << "Welcome back to Sudent DataBase <ver " << ver << ">

守则:

class DataBase {
private:
    int age, stuNumNew;
    string stuName, command;
    string ver = "Alpha";
    float stuNum = 1;
public:
    void Start() {
        cout << "Welcome back to Sudent DataBase <ver " << ver << ">." << endl;
        cout << "Type 'Add' for add a student.";
        cin >> command;
        if (command == "Add") {
            Add();
        }
        else if (command == "Search") {
            cout << "Student number: ";
            cin >> stuNumNew; //Get input from user
            cout << "Name: " << stuName[stuNumNew] << endl << "Age: " << age[&stuNumNew] << endl;
            Start();
        }
    }

    void Add() {

        cout << "Name: ";
        **cin >> stuName[stuNum] * *; //get the name
        cout << "Age: ";
        cin >> age[stuNum]; //get the age
        cout << "Student Number: " << stuNum;
        stuNum = stuNum++;
        stuNumNew = stuNum;
        Start();
    }
};
类数据库{
私人:
国际时代,全新;
字符串stuName,命令;
字符串ver=“Alpha”;
浮点数=1;
公众:
void Start(){
无法创建可变大小的数组
您遇到的问题是由使用固定大小的变量引起的。在这种情况下,您需要的是
向量
,因为您试图做的是为大小可变的数组分配名称和数字,以便您可以在程序中添加新学生

向量允许你这样做

这是修改后的代码:

#包括
#包括
#包括
使用名称空间std;
类数据库{
私人:
输入;
/*声明int类型的向量以包含学生的年龄*/
矢量研究;
/*声明std::string类型的向量以包含学生的姓名*/
矢量学生名;
字符串命令;
字符串ver=“Alpha”;
/*stuNum被删除,因为向量跟踪它们自己的大小*/
公众:
void Start(){

你能想象一下吗
cin>>stuName[stuNum]
的作用吗?因为,目前,你正在尝试读取
char
,并将其写入
stuNum
th位置(错误意味着
stuName
中的
stuNum
第th个字符不存在)?您想创建一个
std::string
数组并读入其中的元素吗?似乎您假设所有类型都可以被视为容器。例如,
age[stuNum];
是没有意义的。使用'float'作为索引很奇怪,您应该使用整数类型。
Start()
Add()
仅受用户输入的限制,以递归方式相互调用。如果用户选择不断添加新学员,这将不可避免地崩溃。