does not name a type"错误?-6ren"> does not name a type"错误?-我正在开发一个简单的电影数据库程序来学习 C++。 我有一个 Main.cc 文件 ... #include #include #include using namespace std; #in-6ren">
gpt4 book ai didi

c++ - 为什么在这个简单的 C++ 程序中会出现 "error does not name a type"错误?

转载 作者:太空宇宙 更新时间:2023-11-04 16:17:16 25 4
gpt4 key购买 nike

我正在开发一个简单的电影数据库程序来学习 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 有一个用于显示 UI 内容的 MovieView ...

#ifndef MOVIEVIEW_H
#define MOVIEVIEW_H

#include "MovieController.h"

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

#endif

... MovieView 有一个 MovieController,因此它可以回调 Controller 以添加电影等。

我的问题是当我编译 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 文件都包含其依赖项,但两个定义不可能在另一个定义之前出现。包含守卫定义决定了哪一个获胜。

您需要将其分解,这样一个只需要一个引用或指向另一个的指针,然后进行前向声明。

关于c++ - 为什么在这个简单的 C++ 程序中会出现 "error <class> does not name a type"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21422544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com