Visual c++ 全局静态指针问题

Visual c++ 全局静态指针问题,visual-c++,visual-studio-2010,variables,pointers,Visual C++,Visual Studio 2010,Variables,Pointers,这是一个相当复杂的问题。我的一个头文件中有一个静态指针。它被包括在所有地方,这就是为什么我把它作为一个静态指针。这样我可以在我的主函数中快速初始化它,以便其他文件可以使用它 问题是,即使在我初始化它并把东西放进去之后。其他文件只发现它为空。这就像每个包含带有静态指针的头的文件都会为自己创建一个副本,即使其他人初始化它,每个文件都有自己的单独副本。当然,否定的目的是拥有一个全局变量 我怎样才能应付这件事?。也许我对静态变量的理解是错误的,或者可能是因为它是指针 我应该将其声明为:&variable

这是一个相当复杂的问题。我的一个头文件中有一个静态指针。它被包括在所有地方,这就是为什么我把它作为一个静态指针。这样我可以在我的主函数中快速初始化它,以便其他文件可以使用它

问题是,即使在我初始化它并把东西放进去之后。其他文件只发现它为空。这就像每个包含带有静态指针的头的文件都会为自己创建一个副本,即使其他人初始化它,每个文件都有自己的单独副本。当然,否定的目的是拥有一个全局变量

我怎样才能应付这件事?。也许我对静态变量的理解是错误的,或者可能是因为它是指针

我应该将其声明为:&variable=5;或者就像变量=5一样;or&variable=(int)5

这就像每个包含带有静态指针的头的文件都会为自己创建一个副本,即使其他人初始化它,每个文件都有自己的单独副本

这就是
static
应用于命名空间范围内的变量时的含义:该变量具有内部链接,使其与给定的转换单元(源文件)处于“本地”状态

如果在头文件的命名空间作用域中有一个
static
变量,并且将该头文件包含在多个.cpp文件中,则该变量将有多个实例:包含头文件的每个.cpp文件都有一个实例


如果希望在多个源文件之间共享全局变量,则需要将其设置为
extern
。在头文件中声明变量为EXTUN,然后在Excel中定义一个.CPP文件。

< P>定义全局指针<代码> static < /C> >导致C++编译器为每个翻译单元创建一个单独的指针,定义被包含在其中。我很确定这不是你想要的,这是你问题的原因

您应该在头文件中声明它
extern
,并在一个cpp文件中定义一次

我可以想象混乱来自于这样一种方式,
静态
关键字在
结构
定义中工作。实际上,它在那里的工作方式不同,它创建了一个变量,对于
结构
的所有实例都是通用的


顺便说一句,如果你真的希望一个变量只在一个翻译单元中可见,建议的方法是将ii放入一个匿名名称空间<代码>静态也可以使用,但不推荐使用它。

是的,您对
静态
关键字的理解是错误的。命名空间和文件范围中的Static关键字声明了一个变量,该变量仅在声明该变量的转换单元(基本上是一个.cpp文件及其所有包含项)内可见。通过在多个.cpp文件中使用的头文件中声明静态变量,可以有效地定义多个变量

如果需要全局指针,则在单个标头中声明它
extern
而不使用
static
,并在单个.cpp文件中定义它而不使用
extern
static
。例如:

在foo.h中:

extern int * p;
在main.cpp中:

int * p = something;

你和威尔克斯的回答正是我需要的。谢谢你,先生