C ++类读取为变量,default-type int?说什么?

时间:2009-07-10 22:31:16

标签: c++-cli

所以,我有两个班级...结构非常基础。我尝试将一个导入到另一个,并声明该类类型的新对象...但是,它似乎将类名称作为变量的名称读取?!

下面提供的标题类不会正确读取“ApplicationManager”类。 代码:

####ifndef _GAME_H_  
####define _GAME_H_  
####include "application.h"  
####include "applicationmanager.h"  
class Game : public Application  
{  
public:  
    Game();  
    ~Game();  
    void LoadContent() override;  
    void UnloadContent() override;  
    void Draw() override;  
private:  
    //int ApplicationManager; //WHY DOES THIS COMPILE??!  
    ApplicationManager management; //This DOES NOT WORK?  
};  
####endif  

这是“ApplicationManager”类的标题。 代码:

####ifndef _APPMANAGER_H_  
####define _APPMANAGER_H_  
####include "game.h"  
####include "application.h"  
class ApplicationManager  
{  
public:  
    ApplicationManager(void);  
    ~ApplicationManager(void);  
private:  
};  
####endif  

发生的错误告诉我,我需要一个“;”在“管理”之前,并且“ApplicationManager”缺少类型说明符,因此假定它是默认类型int。

...为什么它不能正确编译的任何想法?其他人可以尝试这个并报告结果吗?我复制了代码,并将其粘贴到另一个解决方案中,看看是否有东西被破坏了......它仍然没有用。

3 个答案:

答案 0 :(得分:8)

你有一个循环引用。当game.h中包含applicationmanager.h时,编译器尚未读取ApplicationManager类。

要修复,请删除该行

#include "game.h"

来自applicationmanager.h

答案 1 :(得分:2)

为什么Game.hAppicationManager.h之间存在循环依赖关系?

除此之外,我会在#ifdef _*_H中检查您的标题后卫(Application.h)。在复制/粘贴代码或复制文件时,C ++中经常出现的情况是忘记更改新类的标题保护定义名称,因此最终会有两个不同的标题由同一个定义保护。在这种情况下,如果两者都包含在其他文件中,则只有第一个实际上会扩展为任何有用的文件。

答案 2 :(得分:1)

错误信息是误导性的。它基本上说“出于某种原因(可能是引用类型中的错误)我无法识别您正在使用的类型(在您的情况下是ApplicationManager)”。 如果你需要ApplicationManager知道Game制作一个纯虚拟基类(其他术语的接口)并让Game继承(不扩展接口)并让ApplicationManager包含基类头文件