错误C4430:AND错误C2143:语法错误:缺少';'在'*'之前

时间:2013-09-28 06:26:14

标签: c++

我遇到这两个错误。

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'

1 个答案:

答案 0 :(得分:1)

您的头文件RCourseList.h在其 include guard

中有错误
#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在第一个包含时为真,但在第二个包含时为false。

但是因为你的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与传统的包含守卫完全相同,但没有出现这种错误的可能性。