主
#include <stdio.h>
#include "Student.h"
#include <stdlib.h>
void main()
{
Student* pStudents = new Student[0];
int arraySize = 0;
int input = 0;
while(input != 3)
{
printf("Press 1 to add student, 2 to print and 3 to quit.\n");
scanf_s("%d", &input);
switch(input)
{
case 1:
pStudents[numOfStudents].AddStudent(pStudents, arraySize);
arraySize++;
numOfStudents++;
break;
case 2:
break;
case 3:
break;
default:
printf("Invalid input\n");
break;
}
}
}
Student.h
#pragma once
#include <string>
#include <iostream>
using namespace std;
class Student
{
public:
Student(void);
~Student(void);
void AddStudent(Student* pStudent, int arraySize);
private:
string name;
int ID;
};
Student.cpp
#include "Student.h"
Student::Student(void)
: name("N/A")
, ID(0)
{
}
Student::~Student(void)
{
}
void Student::AddStudent(Student* pStudent, int arraySize)
{
if(arraySize == 0)
{
delete[] pStudent;
pStudent = NULL;
pStudent = new Student[1];
}
else
{
Student* temp = new Student[(arraySize+1)];
for(int i = 0; i < arraySize; ++i)
{
temp[i] = pStudent[i];
}
delete[] pStudent;
pStudent = temp;
}
printf("Enter name of student.\n");
cin >> name;
printf("Enter ID of student. \n");
cin >> ID;
}
好的,我一直试图解决这个问题,但我不能。我不确定我做错了什么,但是当我尝试输入名字时,我一直收到写入违规。我试着查找答案,我看到的一些事情说尝试使用矢量,但我还没有教过如何使用它们。
更新
的main.cpp
void main()
{
Student* pStudents = new Student[100];
Student studentGenerator;
int numOfStudents = 0;
string name;
int ID;
int input = 0;
while(input != 3)
{
printf("Press 1 to add student, 2 to print and 3 to quit.\n");
scanf_s("%d", &input);
switch(input)
{
case 1:
printf("Enter name of student.\n");
cin >> name;
printf("Enter ID of student. \n");
cin >> ID;
studentGenerator = Student(name, ID);
pStudents[numOfStudents] = studentGenerator;
numOfStudents++;
break;
case 2:
for(int i = 0; i < numOfStudents; ++i)
{
studentGenerator.PrintStudents(pStudents[i]);
}
break;
case 3:
break;
default:
printf("Invalid input\n");
break;
}
}
}
student.cpp
#include "Student.h"
Student::Student(void)
: name("N/A")
, ID(0)
{
}
Student::~Student(void)
{
}
Student::Student(string studentName, int studentID)
{
name = studentName;
ID = studentID;
}
void Student::PrintStudents(Student student)
{
cout << "Name: " << name << endl;
cout << "ID: " << ID << endl;
}
答案 0 :(得分:1)
你的设计存在严重缺陷。
Student类管理学生列表,实际上只是“main()”中的数组?这毫无意义!
StudentList
如何管理Student
的集合(可以是数组)?
为了澄清您的理解,您认为这是做什么的?:
Student* pStudents = new Student[0];
答案 1 :(得分:1)
您将数组大小初始化为0.由于数组大小是静态的,因此无法执行此操作。你需要设置一个更大的数字我会建议至少100,所以它应该阅读
学生* p学生=新生[100];
您的学生课程也可以改进
应创建一个构造函数,该构造函数接收学生姓名和id并将它们设置为类变量。此外,你不应该对学生班内的阵列产生任何看法。数组函数应在测试类级别或main级别处理。学生姓名和身份证也可以在主要或测试功能中被要求.v
另外,我从用户那里获取数据的更好方法如下:
cout << "Enter Students name-->";
getline(cin,studentName);
跟进您的其他问题:
好吧,我可以告诉你新的,你需要掌握一般的对手。所以简单地说这个就读你的书或者更好一点,因为你完全迷失了!为了帮助你一点点你想要这样做:在主要创建一个类型的虚拟变量学生让我们称之为studentGenerator。从这里你有两个选择:
选项1:要求用户输入名称和id以分隔变量。然后使用这些varabiles生成新的变量 StudentGenerator =新学生(姓名,身份证)
选项2:在学生班中使用新的mutator并使用mutaros来设置数据:这个选项是一种crapy,我会使用选项1代替!
所以现在你已经生成了这个新学生把它放到你的数组中.StundentArray [counter] = StudentGenerator。
现在,这样做完成了studentGenerator,因此你可以重复使用命令(在一个循环中)StudentGenerator = new Student(name,id)来添加额外的学生。