gpt4 book ai didi

C++ 外部指针

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

所以我正在编写一个程序,其中有一个名为 oglapp 的大类,以及使用它的一大堆其他类。我想要实现的是在我所有的 .cpps 中拥有一个 super 全局性的 oglapp*。我的做法是在main.cpp中声明一个oglapp*,它有入口点(设置指针并开始运行类),我在oglapp的头文件末尾有一个extern引用。理论上,如果我在我的项目中的任何地方使用 oglapp 类,我需要包含它的 header ,其中包括 extern,我很好。这就是我所拥有的:

//main.cpp
oglapp* app;
entrypoint(){app=new oglapp(); app->run();}

//oglapp.h
class oglapp { ... }; extern oglapp* app;

//classX.h
#include "oglapp.h"
classX { ... };

//classX.cpp
#include "classX.h"
void classX::somefunction(){app->dosomething();}

我得到的是一个很大的空引用错误。我尝试从 classX 的 .cpp 中包含 oglapp header ,还尝试放置 extern oglapp* 应用程序;对于每个classX,我都尝试了我能想到的一切。另外,奇怪的是,我在所有 classX 中都没有出现空引用错误。他们中的一些人可以毫无问题地使用该应用程序,而另一些人则将其视为空指针。我还没有发现是什么决定了它是否有效。

我做错了什么?另外,如果无法通过这种方式声明指向类的单个超全局指针,我应该怎么做?

最佳答案

对于从 main 中实例化的任何内容或 main 调用的任何内容,它都能可靠地工作。对于全局范围内的对象,它们是在 main 运行之前构造的,因此您的指针尚未设置。

您可以从 main 或调用堆栈的更高层初始化所有内容,或者您​​可以创建一个 oglapp 单例。

或者,由于它看起来不像 oglapp 对其构造函数有任何参数,您可以extern 一个实际实例并创建其中一个那些 在全局范围内,而不是指针。然后你必须警惕静态初始化顺序的失败(查一查!),但至少你的其他全局对象会有一个机会……如果你小心的话.

关于C++ 外部指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29779349/

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