我正在尝试编写一个创建课程的方法,并将其添加到SRS的静态数组中。但是,我的代码没有错误,但根本没有添加课程。我究竟做错了什么? 顺便说一下,课程是动态阵列。
此代码现在正确无误:
#include "StudentReviewSystem.h"
StudentReviewSystem::StudentReviewSystem()
{
numberOfCourses = 0;
courses = new Course[0];
}
void StudentReviewSystem::addCourse( const int courseId, const string courseName )
{
int i = findCourse( courseId );
if ( i == -1 )
{
int newNum = numberOfCourses + 1;
Course *newCourses = new Course[newNum];
for ( int j = 0; j < numberOfCourses; j++ )
{
newCourses[j] = courses[j];
}
Course aCourse(courseId, courseName);
newCourses[numberOfCourses] = aCourse;
delete []courses;
courses = newCourses;
numberOfCourses = newNum;
cout<< "Course added"<< endl;
}
i = findCourse(courseId);
cout<< i;
}
感谢大家的帮助!
答案 0 :(得分:1)
Course newCourses [newNum];
这不是有效的C ++。 newNum
应该是编译时常量。
另外,我认为你不能直接将两个静态数组等同起来。
courses = newCourses;
使用for循环分配单个元素,或者更好的是,使用std::vector
。
请尝试以下代码:
if(i == -1) {
int newNum = numberOfCourses + 1;
Course* newCourses = new Course[newNum];
for(int j = 0; j < numberOfCourses; j++) {
newCourses[j] = courses[j];
}
Course aCourse(courseId, courseName);
newCourses[numberOfCourses] = aCourse;
delete [] courses;
courses = new Course[newNum];
for(int j = 0; j < newNum; j++) {
courses[j] = newCourses[j];
}
delete [] newCourses;
cout<< "Course added"<< endl;
}
答案 1 :(得分:1)
代码中有几个错误。在C ++中,当变量声明为数组时,数组的大小应为cobstabt表达式。所以这个陈述无效
Course newCourses [newNum];
在C / C ++中,没有数组的赋值运算符。所以这段代码也无效
courses = newCourses;
此外,您忘记更改varaibale numberOfCourses的值。 Shpuld是
numberOfCourses = newNum;
此外,您可能无法在C / C ++中放大数组。
您应该动态分配内存,而不是使用数组。所以课程应该定义为
Course *courses;
考虑到其他必要的变化,该功能将采用以下方式
void StudentReviewSystem::addCourse( const int courseId, const string courseName )
{
int i = findCourse( courseId );
if ( i == -1 )
{
int newNum = numberOfCourses + 1;
Course *newCourses = new Course[newNum];
for ( int j = 0; j < numberOfCourses; j++ )
{
newCourses[j] = courses[j];
}
Course aCourse(courseId, courseName);
newCourses[numberOfCourses] = aCourse;
delete []courses;
courses = newCourses;
numberOfCourses = newNum;
cout<< "Course added"<< endl;
}
i = findCourse(courseId);
cout<< i;
}
答案 2 :(得分:0)
int newNum = numberOfCourses + 1;
Course newCourses [newNum];
is not legal c++并且在您的情况下不需要从任何数组复制到另一个数组。只需使用std::vector
作为班级成员,并使用其push_back
方法。
您的老师是否向您解释了不使用std::vector
的原因?如果没有,你最好自己思考并尽力制作好的软件而不是黑客。可以实现动态大小的容器。它是家庭作业任务,然后没有必要编写StudentReviewSystem
类,而是专注于实现动态大小的数组。如果没有,那么你不应该一次重新发明两个轮子,而是专注于一个 - StudentReviewSystem
,然后使用std::vector
。
答案 3 :(得分:0)
您可以使用new []
:
Course* newCourses = new Course[newNum];
然后按照您的方式复制并添加新课程。
不要忘记delete
旧课程数组
delete [] courses;
courses = newCourses;
并更新numberOfCourses
(我认为这是您的错误)
numberOfCourses = newNum;