C++;语法有问题,因此类可以将数据传递给其他类 我在C++中没有太多的运气,让我的一个类从我的其他类中看到/引用/复制数据,以便它可以使用。

C++;语法有问题,因此类可以将数据传递给其他类 我在C++中没有太多的运气,让我的一个类从我的其他类中看到/引用/复制数据,以便它可以使用。,c++,class,syntax,forward-declaration,C++,Class,Syntax,Forward Declaration,基本上,当我尝试向前声明时,我会遇到错误,“Core”没有命名类型(http://stackoverflow.com/questions/2133250/does-not-name-a-type-error-in-c)我得到字段“核心”的类型不完整 我猜第二个错误是由于类没有真正初始化,所以它没有得到任何东西?我不知道:((见下面的代码) 在我的C#游戏中,我通常会创建一个“核心”类,然后在其中启动其他类,如“实体”、“玩家”、“武器”等。当我启动这些其他类时,我会通过“此” 公共武器管理员c_

基本上,当我尝试向前声明时,我会遇到错误,“Core”没有命名类型(http://stackoverflow.com/questions/2133250/does-not-name-a-type-error-in-c)我得到字段“核心”的类型不完整

我猜第二个错误是由于类没有真正初始化,所以它没有得到任何东西?我不知道:((见下面的代码)

在我的C#游戏中,我通常会创建一个“核心”类,然后在其中启动其他类,如“实体”、“玩家”、“武器”等。当我启动这些其他类时,我会通过“此”

公共武器管理员c_武器管理员; ... c_WeaponManager=新的WeaponManager(本); 所以我可以随时从任何地方访问任何类的公共值,只要它通过核心。 如: 因此,当我通过“武器”类进行更新时,它检测到它击中了玩家,我只需在该类中获得一个函数来

core.playerClass.debutcthealth(damageamount); …或类似的东西

它允许我将许多我想在全球范围内访问的变量整齐地隐藏在我认为合适的区域

我知道这不是一种很好的编程方法,但这是我比较熟悉的方法,我主要从事业余编程,因此我喜欢能够快速访问数据,而不需要繁琐的Get()和Set()函数将数据从一个类传递到另一个类。此外,我还在头文件中摸索,因为它们似乎是个麻烦

//-----------[在vid_glinit.h中]------------------- 包括“core.h” 类Vid_glInit { 公众: RECT-glWindowRect; 核心; Vid_glInit(); ~Vid_glInit(); 无效开始(HWND _hGameWindow,内部解决方案X,内部解决方案Y); 私人: }; //------------[核心.h中]---------- 包括“vid_glinit.h” 类核心 { 公众: Vid_glInit Vid_glInit(本); 枚举游戏模式 { 初始化, 菜单, 游戏性 }; 游戏模式; HWND-hGameWindow; HGLRC hGameRenderContext;//永久呈现上下文 HDC hGameDeviceContext;//专用GDI设备上下文 //功能在这里 核心(); ~Core(); void testFunc(); 无效运行(); 无效更新(); void Render(); 无效的StartGl(内部资源,内部解决); 私人: };
我们的目标是,当我启动OpenGl时,我不需要很多小函数来传递数据,而是简单地告诉glFunctions谁需要设备或渲染上下文来使用core.hGameDeviceContext,如果这有意义的话,问题是你已经

class Vid_glInit
{
public:
    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

在这种情况下,可以使用类VIDGLILIT;< /Cord>简单的向前声明,因为这些指针只是内部指针,而指针的大小是固定的,不管它背后的结构是什么,即C++可以在内存中设置核心类,而不必完全了解VIDG-GLIIT结构。

class Vid_glInit
{
public:
    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

在这种情况下,可以使用 VIDGGLIIT;简单的向前声明,因为这些指针只是内部指针,而指针的大小是固定的,不管它背后的结构是什么,即C++可以在内存中设置核心类,而不必完全了解VIDGLILIT结构。你可能想把它标记为C++而不是C。现在我猜如果我引用它的本质,它在其他未来的类中创建一个变量类型的东西,我用它作为一个邮箱来发送信息,用于其他类中的使用,那么这意味着我想要创建一个“核心”(核心引用)。“在我未来要使用的每一个类中?但我被困在了第一步,试图在“core”中创建“vid_glInit”类:(现在我猜,如果我‘引用’某个东西,它本质上是在其他未来的类中创建一个变量类型的东西,我用它作为一种邮箱发送信息以在其他类中使用?那么这是否意味着我要创建一个“core&”(核心引用)“在我未来要使用的每一个类中?但我被困在了第一步,试图在“core”中创建“vid_glInit”类:(