visual-c++ - 全局静态指针问题

标签 visual-c++ visual-studio-2010 variables pointers

这是一个相当复杂的情况下的问题。我的一个头文件中有一个静态指针。它无处不在,这就是为什么我把它作为静态指针。这样我就可以在我的主要功能中快速初始化它,以便其他文件可以使用它。

问题是这样的,即使在我初始化它并将东西放入其中之后也是如此。其他文件只发现它为 NULL。这就像每个包含带有静态指针的 header 的文件都会为自己制作一个副本,即使其他人初始化它,每个文件都有自己单独的副本。当然,否定拥有全局变量的目的。

我该如何应对?也许我对静态变量的理解有误,或者是因为它是一个指针?

我应该将其声明为:&variable = 5;或者就像 variable = 5;或 &variable = (int)5?

最佳答案

It is like every file that includes the header with the static pointer makes a copy of it for itself and even when others initialize it, each file has their own separate copy.

这就是 static 应用于命名空间范围内的变量时的含义:变量被赋予内部链接,使其成为给定翻译单元(源文件)的“本地”。

如果您在头文件的命名空间范围内有一个 static 变量,并且您将该头文件包含在多个 .cpp 文件中,那么将有该变量的多个实例:一个对应于每个 .cpp 文件。包含头文件的 cpp 文件。

如果你想要一个在多个源文件之间共享的全局变量,你需要将它设为extern。在头文件中将变量声明为 extern,然后在您的一个 .cpp 文件中定义 extern 变量。

关于visual-c++ - 全局静态指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3431595/

相关文章:

c++ - 混合 VS2012 平台工具集

c - 如何将宽字符串文字与 PRId32、PRIu64 等连接起来?

qt - Qt Creator + msvc 编译器的分析器

javascript - 使用 getDay Javascript 获取明天的日期

php - 检查是否设置了变量然后不重复地回显它?

c++ - 从 vector 中排序和提取元素

c# - VSHost.exe在VS2010中一直启动

c - 如何在需要 LPCOLESTR 的函数中使用 argv[]

c++ - Visual Studio 2008/10 的即时窗口中的 "search memory"是否损坏?

c - groovy "def"声明转换为 C 语言?