我正在努力建立一个学生评论系统,并且有一些我无法调试的错误。这是.h和.cpp文件代码。
#include <string>
using namespace std;
class StudentReviewSystem
{
public:
StudentReviewSystem();
~StudentReviewSystem();
void addCourse(const int courseId,const string courseName);
void deleteCourse(const int courseId);
void addStudent(const int courseId, const int studentId, const string studentName);
void dropStudent(const int courseId, const int studentId);
void addGradeForm(const int courseId, const int formId, const double weight);
void deleteGradeForm(const int courseId, const int formId);
void showAllCourses();
void showCourse(const int courseId);
void showStudent(const int studentId);
int studentArraySize;
int courseArraySize;
Student *studentArray;
Course *courseArray;
};
我遇到的错误是:
>c:\users\kaan mert berkem\documents\visual studio 2013\projects\project2\project2\studentreviewsystem.h(22): error C2143: syntax error : missing ';' before '*' 1>c:\users\kaan mert berkem\documents\visual studio 2013\projects\project2\project2\studentreviewsystem.h(22): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>c:\users\kaan mert berkem\documents\visual studio 2013\projects\project2\project2\studentreviewsystem.h(23): error C2143: syntax error : missing ';' before '*' 1>c:\users\kaan mert berkem\documents\visual studio 2013\projects\project2\project2\studentreviewsystem.h(23): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
这是我的srs系统的构造函数和函数。在这部分我不断得到的错误是: courseArray未声明的标识符, 删除:无法删除非指针的对象, '.getId'左边必须有class / struct / union
#include "StudentReviewSystem.h"
#include "Student.h"
#include "Course.h"
#include <string>
#include <iostream>
using namespace std;
//constructor
StudentReviewSystem::StudentReviewSystem() {
int studentArraySize = 0;
int courseArraySize = 0;
Student *studentArray = new Student[studentArraySize];
Course *courseArray = new Course[courseArraySize];
}
//functions
void StudentReviewSystem::deleteCourse(const int cId) {
bool found = false;
for (int i = 0; i < courseArraySize; i++) {
if (courseArray[i].getId() == cId) {
found = true;
break;
}
}
if (!found) {
cout << "Course " << cId << "is not found" << endl;
}
else {
for (int i = 0; i < courseArraySize; i++) {
if (courseArray[i].getId() == cId) {
cout << "Course " << courseArray[i].getId() << " has been deleted" << endl;
courseArray[i].~Course();
}
}
Course *cArr = new Course[courseArraySize - 1];
for (int i = 0; i < courseArraySize - 2 && &courseArray[i]!= NULL; i++) {
cArr[i] = courseArray[i];
}
for (int i = courseArraySize - 2; i > 0 && &courseArray[i] != NULL; i--) {
cArr[i] = courseArray[i + 1];
}
delete []courseArray;
courseArray = new Course[courseArraySize - 1];
for (int i = 0; i < courseArraySize; i++) {
courseArray[i] = cArr[i];
}
delete []cArr;
}
}
我有什么方法可以解决这些错误?
答案 0 :(得分:0)
在StudentReviewSystem
班级中,您使用的是Student
和Course
类,但尚未声明它们。只需在StudentReviewSystem
类之前声明它们:
class Student;
class Course;
class StudentReviewSystem
{
...
};
您还有一些其他问题,例如在构造函数中将studentArray
和courseArray
声明为局部变量,而不是使用成员变量。
答案 1 :(得分:0)
是否包含Student
和Course
的标题,例如
#include "Student.h"
#include "Course.h"
或前方声明了他们,
class Student;
class Course;
错误
缺少类型说明符 - 假设为int。注意:C ++不支持default-int
通常表示编译器尚未看到函数声明的返回类型。
答案 2 :(得分:0)
您应该包含声明学生和课程类型的标题或替换这些行
Student *studentArray;
Course *courseArray;
};
的
class Student *studentArray;
class Course *courseArray;
};
答案 3 :(得分:0)
我解决了这个问题,只是在必要的情况下声明了另一个头文件的必要性,并且当上面的一个文件调用下面的文件时,你不能调用已经结束的文件而另一个文件就足以调用那个文件了。在他们之上。