我有一个用于学习C ++的简单电影数据库程序。

我有一个Main.cc文件...

#include <iostream>
#include <string>
#include <sstream>
using namespace std;
#include "MovieController.h"

int main()
{
  MovieController mc;
  mc.execute();
  return 0;
}


...创建并“执行” MovieController ...

#ifndef MOVIECONTROLLER_H
#define MOVIECONTROLLER_H

#include "MovieView.h"

class MovieController
{
  public:
    void execute();
    void showMainMenuUI();
    void doAddMovie(string title, int year, string genre);
  private:
    MovieView movieView;
};

#endif


... MovieController有一个MovieView,该调用用来显示UI内容...

#ifndef MOVIEVIEW_H
#define MOVIEVIEW_H

#include "MovieController.h"

class MovieView
{
  public:
    void showMainMenu();
    void showAddMovie();
  private:
    MovieController movieController;
};

#endif


... MovieView具有MovieController,因此它可以回调到控制器以添加电影等。

我的问题是当我编译Main.cc时出现以下错误...

$ g++ -o test Main.cc
In file included from MovieController.h:4:0,
                 from Main.cc:17:
MovieView.h:17:5: error: ‘MovieController’ does not name a type


MovieView为什么无法识别MovieContoller类型?

最佳答案

您有通函包括。 MovieView的定义需要MovieConroller的定义,但是MovieController的定义需要MovieView的定义。

每个.h文件都包含其依赖项,但是从物理上讲,这两个定义都不可能先于另一个定义。包括卫队的定义确定哪一个获胜。

您需要对其进行分解,以便一个仅需要引用或指向另一个,然后进行前向声明。

10-08 11:36