C++ 在这种情况下,静态int的值会改变吗

C++ 在这种情况下,静态int的值会改变吗,c++,C++,我目前有一个包含在多个头文件和源文件中的头文件。头文件如下所示 File:External.h #ifndef EXTERNAL_H #define EXTERNAL_H #include "memory" static int pid=-1; #endif // EXTERNAL_H 这是我当前场景的简化,只是为了检查我是否可能错了。现在假设我有两个类foo和bar。以下是我注意到的行为 #include "External.h" void foo::someMethod() {

我目前有一个包含在多个头文件和源文件中的头文件。头文件如下所示

File:External.h
#ifndef EXTERNAL_H
#define EXTERNAL_H

#include "memory"

static int pid=-1;

#endif // EXTERNAL_H
这是我当前场景的简化,只是为了检查我是否可能错了。现在假设我有两个类
foo
bar
。以下是我注意到的行为

#include "External.h"
void foo::someMethod()
{
   pid =13; //Change the value of pid;
   bar_ptr = new bar();
}

//bar constrcutor
#include "External.h"
bar::bar()
{
   int a = pid;  //The value of a is -1 wasnt it suppose to be 13
}

a的值不是假定为13吗?特别是因为它是静态类型的开放变量(不是结构或类)

这是因为每个文件都包含头文件,因此每个编译单元(大致为源文件)的内部都有以下定义:

static int pid=-1;
因此,他们每个人都有自己的副本

真的,你应该这样做:

外部

外部


这是因为每个文件都包含头文件,因此每个编译单元(大致为源文件)的内部都有以下定义:

static int pid=-1;
因此,他们每个人都有自己的副本

真的,你应该这样做:

外部

外部


static
说明符给出了名称
pid
内部链接,因此它指的是每个翻译单元中的不同实体。请发布真实代码。我们或许可以对答案做出相当可靠的猜测,但你的问题仍然应该重现这个问题。事实上,你走了一些弯路,我可以马上发现。嗯。。好的,谢谢你的澄清。这让我很困惑,这里有两个不同的pid变量。。或者更准确地说,每个包含该头文件的文件中都有一个。@BarryTheHatchet我理解。我试图复制我的情况,因为我无法发布整个项目。但是,如果有人有疑问,我将尝试澄清这一点。
static
说明符给出名称
pid
内部链接,因此它指的是每个翻译单元中的不同实体。请发布真实代码。我们或许可以对答案做出相当可靠的猜测,但你的问题仍然应该重现这个问题。事实上,你走了一些弯路,我可以马上发现。嗯。。好的,谢谢你的澄清。这让我很困惑,这里有两个不同的pid变量。。或者更准确地说,每个包含该头文件的文件中都有一个。@BarryTheHatchet我理解。我试图复制我的情况,因为我无法发布整个项目。但是,如果有人有问题,我会尝试澄清。它可以是External.cpp吗?是的,你可以称它为External.cpp它可以是External.cpp吗?是的,你可以称它为External.cpp
// The actual implementation
int pid = -1;