【发布时间】:2012-04-25 19:26:39
【问题描述】:
当我尝试执行此代码段时出现以下错误:“菜单未命名类型”。我知道它与循环引用有关,但对于我的一生,我无法弄清楚是什么.此外,menu、go 和 manager 都在反复报错。代码段贴在下面:
#ifndef GO__H
#define GO__H
#include <SDL.h>
#include <iostream>
#include <string>
using std::cout; using std::endl;
using std::string;
#include "ioManager.h"
#include "gui.h"
#include "clock.h"
#include "menu.h"
//class Menu;
class Go {
public:
Go ();
void play();
private:
SDL_Surface *screen;
Gui gui;
Menu menu;
void drawBackground() const;
Go(const Go&);
Go& operator=(const Go&);
};
#endif
这里是菜单:
#ifndef MENU_H
#define MENU_H
#include <SDL.h>
#include <iostream>
#include "ioManager.h"
#include "gui.h"
#include "clock.h"
#include "manager.h"
class Menu {
public:
Menu ();
void play();
private:
const Clock& clock;
bool env;
SDL_Surface *screen;
Gui gui;
Manager mng;
void drawBackground() const;
Menu(const Menu&);
Menu& operator=(const Menu&);
};
#endif
经理:
#ifndef MANAG_H
#define MANAG_H
#include "go.h"
class Manager {
Go go;
//other code
}
你能看出问题出在哪里吗?错误信息:
在 go.h:13:0 包含的文件中, 来自 manager.h:33, 来自 manager.cpp:2: menu.h:28:11:错误:字段“mng”的类型不完整
【问题讨论】:
-
menu.h 会以某种方式引用 go.h 吗?这可能会导致这种错误。
-
尝试将代码减少到产生错误的最少行数 - 即删除除
Menu之外的所有成员以及所有相关的所有不需要的内容,然后编辑问题。跨度> -
尝试在
class GO中将Menu menu;更改为Menu* menu; -
另外,您的编译器使用 Menu 报告错误的文件的行号。那会很有帮助
-
请包含完整编译器消息,行号和文件名。如果行号超过几十行,还可以考虑在代码列表中包含行号。从提示和片段中重构这些信息并不有趣。