我遇到这两个错误。
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'
答案 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
与传统的包含守卫完全相同,但没有出现这种错误的可能性。