0

我有这两个错误。

error C2143: syntax error : missing ';' before '*'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

我已经从互联网上检查了解决方案,每个人都推荐#include <string>并使用std::string而不是string,这是我的头文件。我应用了解决方案,但问题仍然存在。这是我的代码

friend std::ostream& operator<<(std::ostream& os, const Student& s);
friend class StudentList;

public:

    Student(int id = 0,std::string name = "none");
    virtual ~Student();
private:
    std::string name;
    int id;
    Student* next;  
RCourseList* rCList;

这是我程序的上半部分

#ifndef STUDENT_H
#define STUDENT_H
#include <iostream>
#include <string>
#include "RCourseList.h"

这是RCourseList.h

#ifndef COURSELIST_H
#define RCOURSELIST_H

#include "RCourse.h"

class RCourseList

{
public:
    RCourseList();

private:
    RCourse* rhead;
};

#endif // RCOURSELIST_H'
4

1 回答 1

1

您的头文件 RCourseList.h 在其包含保护中有错误

#ifndef COURSELIST_H
#define RCOURSELIST_H

它应该是

#ifndef RCOURSELIST_H
#define RCOURSELIST_H

这是一个问题的原因是因为您有另一个名为 CourseList.h 的头文件,该头文件也以包含保护开头。

#ifndef COURSELIST_H
#define COURSELIST_H

所以 CourseList.h 定义了宏 COURSELIST_H 并且这可以防止 CourseList.h 文件被包含两次(在一次编译中),因为#ifndef COURSELIST_H在第一次包含时为真,但在第二次包含时为假。

但是因为你的 RCourseList.h 错误地以#ifndef COURSELIST_H包含 CourseList.h 开头也会阻止以后的 RCourseList.h 被包含。

简而言之,在你的头文件名之后命名你的包含保护。对此要非常小心,否则会出现这种错误。

或者你可以用非标准但广泛支持的方式替换传统的包含防护#pragma once,就像这样

#pragma once

#include "RCourse.h"

class RCourseList

{
public:
    RCourseList();

private:
    RCourse* rhead;
};

#pragma once与传统的 include 守卫完全一样,但没有出现这种错误的可能性。

于 2013-09-28T06:51:08.410 回答