gpt4 book ai didi

c++ - 不完整类型 C++

转载 作者:行者123 更新时间:2023-11-28 00:57:29 28 4
gpt4 key购买 nike

当我尝试执行此代码段时出现以下错误:“菜单未命名类型”。我知道它与循环引用有关,但对于我的生活我无法弄清楚是什么.此外,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
}

你能看出问题出在哪里吗?错误信息:

In file included from go.h:13:0, from manager.h:33, from manager.cpp:2: menu.h:28:11: error: field ‘mng’ has incomplete type

最佳答案

manager.h 包括 go.h 其中包括 menu.h 其中包括 manager.h .. .

class Menu 在到达 class Manager 的定义之前被定义。

但是,class Menu 需要一个Manager 但是因为编译器不知道 Manager 也不知道它有多大做到这一点。

您可以转发声明 class Manager 并使 Menumng 成员成为指针或引用:

class Manager;

class Menu {
...
Manager* mng;

// or this:
//Manager& mng;
...

Here's a good explanation of circular references and how to fix them.

关于c++ - 不完整类型 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10322419/

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