C ++未声明的标识符和语法错误&无法删除不是指针的对象

时间:2013-11-24 15:02:25

标签: c++ visual-studio-2013

我正在努力建立一个学生评论系统,并且有一些我无法调试的错误。这是.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;
}
}

我有什么方法可以解决这些错误?

4 个答案:

答案 0 :(得分:0)

StudentReviewSystem班级中,您使用的是StudentCourse类,但尚未声明它们。只需在StudentReviewSystem类之前声明它们:

class Student;
class Course;

class StudentReviewSystem
{
    ...
};

您还有一些其他问题,例如在构造函数中将studentArraycourseArray声明为局部变量,而不是使用成员变量。

答案 1 :(得分:0)

是否包含StudentCourse的标题,例如

#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)

我解决了这个问题,只是在必要的情况下声明了另一个头文件的必要性,并且当上面的一个文件调用下面的文件时,你不能调用已经结束的文件而另一个文件就足以调用那个文件了。在他们之上。