gpt4 book ai didi

c++ - C++中对象访问包含它的对象

转载 作者:行者123 更新时间:2023-11-30 03:58:09 25 4
gpt4 key购买 nike

我正在尝试用 C++ 创建游戏。它有一个管理一切的“ session ”类。它包含诸如 GraphicsManager、SoundManager 和当前世界之类的东西。它还包含一个指向其自身实例的静态指针。这样,我希望 GraphicsManager 可以使用世界,以便可以渲染它,例如。

这是我的代码的简化版本:

主.ccp

#pragma once
#include "Session.h"

int main() {
Session::getSession()->run(); //Starts a new session and runs it
return 0;
}

session .h

#pragma once
#include "GraphicsManager.h"
#include "World.h"

class Session; //Forward declaration so it can have a pointer to itself

class Session {
private:
Session();
static Session* s;
World* w; //Pointer because no world is loaded at the beginning of the program
GraphicsManager gm; //Required right away
public:
~Session();
void run(); //Actually launches the game after preparation; not further declared in this example
World* getWorld(); //Returns the pointer to the current world
static Session* getSession();
}

session .cpp

#include "Session.h"

Session::Session(): gm(GraphicsManager()) {}

Session* Session::getSession() { //Return an instance of Session. If no instance exist yet, create one.
if(s == NULL) s = new Session();
return s;
}

World* Session::getWorld() {return w;} //Returns a pointer to the current world

图形管理器.h

#pragma once;

class GraphicsManager {
private:
void render();
public:
void run(); //Calls the render method repeatedly; no further declaration in this example
}

图形管理器.cpp

#include "GraphicsManager.h"

void GraphicsManger::render() {
World* w = Session::getSession()->getWorld(); //Get pointer to current world so it can be rendered
}

render 方法是我卡住的地方。如果我将 #include "Session.h" 放入 GraphicsManager.h 文件中,它会给我一个错误,因为显然两个头文件不能相互包含。如果我在 GraphicsManager.hGraphicsManager.cpp 的开头放置前向声明,Visual Studio 会告诉我不允许使用不完整的类型。

这让我头痛了好几个星期。我以前用 Java 做过游戏,这种模式被接受了。那我该怎么做呢?如果这种结构在 C++ 中是不可能的,您还有其他建议吗? Scheme

最佳答案

在 GraphicsManager.cpp 中,编译器需要了解 Session,因此您必须 #include "Session.h" 顺便说一句,它也包括 GraphicsManager作为世界。

前向定义是不够的,因为编译器无法检查 getSession()->getWorld() 表达式的类型。

显然,您的 GraphicsManager.h 本身并不依赖于其他定义,因此这里应该没有问题。

关于c++ - C++中对象访问包含它的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27593045/

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