C++ C++;未知类型名称,即使类型是通过标头定义的

C++ C++;未知类型名称,即使类型是通过标头定义的,c++,C++,这让我发疯,我有一个名为Model的类,一个名为View的类,还有一个用于GameCommand的头文件。据我所知,我已经包括了右标题保护和所有内容,但我一直得到一个未知类型名错误 模型h #ifndef MODEL_H #define MODEL_H class Model { public: Model(); //default constructor }; #endif Model.cpp #include "Model.h" #include <iostream>

这让我发疯,我有一个名为Model的类,一个名为View的类,还有一个用于GameCommand的头文件。据我所知,我已经包括了右标题保护和所有内容,但我一直得到一个未知类型名错误

模型h

#ifndef MODEL_H
#define MODEL_H

class Model
{
public:
    Model(); //default constructor
};

#endif
Model.cpp

#include "Model.h"
#include <iostream>
using namespace std;

Model::Model() //default constructor
{
whatever
}
View.cpp

#include "View.h"
#include <iostream>
using namespace std;

View::View()
{ whatever
}

我觉得我什么都试过了,这里有什么我没有看到的吗?

您可以尝试向前声明类

班级模式

阶级观


在GameCommand.h

中,是否将
Model.h
View.h
中的任何一个包含在一起?您可能不会显示整个代码。至少我不能用你提供的复制。在
GameCommand.h
中,你可能可以对
模型
视图
使用前向声明,而不包括标题。这意味着你有一个循环包含依赖项。我们通常通过转发前面提到的声明来解决这个问题。@RaunaqZamal如果
Model.h
包含
View.h
,那么您最初发布的代码是误导性的。这就是为什么我之前的评论是关于编译器错误的,而不是由分析源代码的工具生成的错误。
#ifndef GAMECOMMAND_H
#define GAMECOMMAND_H
#include "Model.h"
#include "View.h"

void DoGoCommand(Model&, View&);
#ifndef GAMECOMMAND_H
#define GAMECOMMAND_H
#include "Model.h"
#include "View.h"

void DoGoCommand(Model&, View&);
error: unknown type name 'Model'
void DoGoCommand(Model&, View&);
                 ^
error: unknown type name 'View'
void DoGoCommand(Model&, View&);
                         ^