0

この2つのエラーが発生しています。

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

私はすでにインターネットからソリューションをチェックし#include <string>ましstd::stringstring. 解決策を適用しましたが、問題はまだあります。これは私のコードです

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 ファイルが (1 回のコンパイルで) 2 回インクルードされるのを防ぎます#ifndef COURSELIST_H

しかし、RCourseList.h が間違って CourseList.h をインクルードすることから始まる#ifndef COURSELIST_Hため、後の RCourseList.h がインクルードされなくなります。

つまり、ヘッダー ファイル名にちなんでインクルード ガードに名前を付けます。そうしないと、この種のエラーが発生します。

または、次のように、従来のインクルード ガードを、標準ではないが広くサポートされている に置き換えることもできます#pragma once

#pragma once

#include "RCourse.h"

class RCourseList

{
public:
    RCourseList();

private:
    RCourse* rhead;
};

#pragma once従来のインクルードガードとまったく同じですが、この種のエラーの可能性はありません。

于 2013-09-28T06:51:08.410 に答える