我有一个用于学习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
文件都包含其依赖项,但是从物理上讲,这两个定义都不可能先于另一个定义。包括卫队的定义确定哪一个获胜。
您需要对其进行分解,以便一个仅需要引用或指向另一个,然后进行前向声明。