我没有很多运气在C ++中获取我的一个类来查看/引用/复制其他类中的数据,以便它可以使用它。
基本上我收到错误'Core'没有命名类型或当我尝试转发声明时(http://stackoverflow.com/questions/2133250/does-not-name-a -type-error-in-c)我得到字段'core'的类型不完整
我猜测第二个错误是由于该类可能未真正初始化,所以它没有任何结果?我不知道:((见底部代码)
在我的C#游戏中,我通常会创建一个“核心”类,然后在其中我将启动其他类,如“实体”,“玩家”,“武器”等。当我开始这些其他我会通过“这个”
public WeaponManager c_WeaponManager; ... c_WeaponManager = new WeaponManager(this);
所以我可以随时随地访问任何类的公共值,只要它通过核心。 例如: 因此,当我通过'武器'类进行更新,并且它检测到它击中了玩家时,我只是在该类中获得一个函数...
core.playerClass.deductHealth(damageAmmount);
..或类似的东西。
它允许我保留许多我想要访问的变量,整齐地隐藏在我觉得合适的区域。
我知道这不是一个很好的编程方法,但它是我非常熟悉的,我主要做爱好编程,所以我喜欢能够快速访问我的数据而没有官僚Get()和Set ()函数将数据从一个类传递到另一个类和另一个类。此外,我仍然在通过头文件摸索,因为他们似乎是一个痛苦的屁股
//-----------[In vid_glinit.h]------------------- include "core.h" class Vid_glInit { public: RECT glWindowRect; Core core; Vid_glInit(); ~Vid_glInit(); void StartGl(HWND _hGameWindow, int resolutionX, int resolutionY); private: }; //------------[in core.h]---------- include "vid_glinit.h" class Core { public: Vid_glInit vid_glinit(this); enum GAME_MODE { INIT, MENUS, GAMEPLAY }; GAME_MODE gameMode; HWND hGameWindow; HGLRC hGameRenderContext; // Permanent Rendering Context HDC hGameDeviceContext; // Private GDI Device Context //functions go here Core(); ~Core(); void testFunc(); void Run(); void Update(); void Render(); void StartGl(int resoultionX, int resolutionY); private: };
我的目标是当我启动OpenGl时,而不是有很多小函数来传递数据我只需告诉需要Device或Rendering上下文的glFunction使用 core.hGameDeviceContext ,如果是有道理
答案 0 :(得分:1)
问题是你有
class Vid_glInit
{
public:
Core core;
表示在此类中内联分配Core对象的完整副本,以及
class Core
{
public:
Vid_glInit vid_glinit(this);
这意味着在类内部分配Vid_glInit对象的完整副本 - 现在这是圆形的,并且不能计算结构的大小。
您可能实际上想要通过引用或指针分配至少一个,即
class Core
{
public:
Vid_glInit* vid_glinit; // pointer: access properties as core.vid_glinit->foo
Vid_glInit& vid_glinit; // reference: properties are core.vid_glinit.foo
在这种情况下,您可以使用class Vid_glInit;
简单的前向声明,因为这些只是内部指针,指针的大小是固定的,无论其背后的结构如何,即C ++可以在内存中布置Core类而不用完全了解Vid_glInit结构。