2013-09-28 2 views
0

У меня эти две ошибки.ошибка C4430: И ошибка C2143: синтаксическая ошибка: отсутствует ';' до '*'

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

На какой строке происходят эти ошибки? – Johnsyweb

+1

Пожалуйста, уменьшите это до примера, который кто-то может скомпилировать. Также каковы номера строк для этих ошибок? Это домашняя работа? –

+0

на последней строке RCourseList * rClist; до того, как я включил этот указатель в мой код файла заголовка, работал нормально. –

ответ

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 делает точно так же, как и традиционные включают охранник, но без возможности такого рода ошибки ,

+0

как новичок это бесценное знание для меня, спасибо большое сэр. –

Смежные вопросы