【问题标题】:Error expected class-name before ‘{’ token C++在“{”标记 C++ 之前出现错误的预期类名
【发布时间】:2015-12-10 16:06:57
【问题描述】:

我在尝试编译我的项目时不断收到此错误, 但我不知道为什么。 另外我得到了

“错误:‘CrewMember’尚未声明” 对于一个类方法,错误“expected ‘,’ or ‘...’ before ‘

我很确定问题出在正确的“包含”上,但我无法解决

这是我的代码:

#ifndef SMALLTOBIGIDSORTER_H_
#define SMALLTOBIGIDSORTER_H_
#include "CrewSorter.h"
#include "CrewMember.h"

//this is the line where i get the error
class SmallToBigIdSorter: public CrewSorter {
public:
    SmallToBigIdSorter();
    ~SmallToBigIdSorter();
    //this is where i'm getting the second error error: ‘CrewMember’ has not been declared
    bool compare(CrewMember* member1, CrewMember* member2);
};

#endif /* SMALLTOBIGIDSORTER_H_ */

CrewSorter 类:

#ifndef CREWSORTER_H_
#define CREWSORTER_H_
#include "CrewMember.h"
#include <vector>
using namespace std;
class CrewSorter {
public:
    CrewSorter();
    virtual ~CrewSorter();
//expected ‘,’ or ‘...’ before ‘<’ token
    void addCrewMember(vector<CrewMember*>* membersList, CrewMember* newMember);
    void removeCrewMember(vector<CrewMember*>* membersList, int id);
    void sortCrewList(vector<CrewMember*>* membersList);
    virtual bool compare(CrewMember* member1, CrewMember* member2);
};

#endif /* CREWSORTER_H_ */

CrewMember 类:

#ifndef CREWMEMBER_H_
#define CREWMEMBER_H_
#include "Movie.h"
#include <iostream>
#include <string>

using namespace std;
class Movie;
class CrewMember {
protected:
    string name;
    int id;
    int age;
    char gender;
    int moviesNumber;
    vector<Movie*>* movies;
    string jobDescription;

public:

    /*
    * the function will print a string representing the
    * employee unique string
    */
    virtual void print(std::ostream& str) const = 0;
    friend ostream& operator<<(ostream& os, const CrewMember& crewMember);

    /*
    *  the function will add the given movie
    * to the crew member
    */
    void addMovie(Movie* newMovie);

    /*
    *  the function will remove the given movie
    * from the crew member
    */
    void removeMovie(string movieId);

    vector<Movie*> copyMovieList();

    bool movieExists(Movie* movie);

    /*
    * will print the movie list of the crew member
    */
    void printMovies();
    void printMember();


    /*
     * constructor
     */
    CrewMember();
    CrewMember(string name, int id ,int age, char gender,
                        vector<Movie*>* movies, string jobDescription);

    void removeFromAllMovies();

    /*
     * destructor
     */
    virtual ~CrewMember();

    /*
     * getters
     */
    vector<Movie*>* getMovies() const;
    int getMoviesNumber() const;
    int getId() const;
    int getAge() const;
    string getName() const;
    string  getDescription() const;
};

#endif /* CREWMEMBER_H_ */

【问题讨论】:

  • 我想Movie.h 包括CrewMember.h?
  • 离题但你永远不想在头文件中包含using namespace std;。
  • 我很确定您需要从 CrewMember.h 中删除 #include "Movie.h" 作为清理循环包含问题的一部分。删除该包含可能产生的任何后果都可以通过某种方式处理,而不会造成循环问题。
  • @Ryan 尝试将#include "Movie.h" 移动到.cpp 文件中。
  • 是的,你们说得很清楚,从电影到剧组成员的循环定义,不是吗?

标签: c++ inheritance include


【解决方案1】:

在您的 CrewSorter 和 SmallToBigIdSorter 中,您只使用 CrewMember* - 因此您可以在头文件(两个排序器类)中只使用前向声明。

class CrewMember;

class SmallToBigIdSorter : public CrewSorter {
// ...

然后在 .cpp 文件中,#include "CrewMember.h" 所以它知道实际的实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-07
    • 2021-09-22
    • 2015-01-19
    • 2017-02-19
    • 1970-01-01
    相关资源
    最近更新 更多