我正在尝试更新static int
test.h
static int Delay = 0;
void UpdateDelay();
TEST.CPP
#include "test.h"
void UpdateDelay(){
Delay = 500;
}
Main.cpp的
#include "test.h"
int main(){
UpdateDelay();
std::cout << Delay << std::endl;
return 0;
}
输出应为:500 但它显示:0
THX
答案 0 :(得分:6)
声明为static
的全局变量具有 internal linkage 。这意味着每个翻译单元(即.cpp
文件)都会获得该变量的私有副本。
对一个翻译单元的私人副本所做的更改不会对不同翻译单元持有的同一变量的私有副本产生任何影响。
如果您想共享一个全局变量,请在单个翻译单元中为其提供一个定义,并让所有其他翻译单元通过指定的声明引用它extern
关键字:
<强> test.h 强>
extern int Delay;
void UpdateDelay();
<强> TEST.CPP 强>
#include "test.h"
void UpdateDelay(){
Delay = 500;
}
<强>的main.cpp 强>
#include "test.h"
int Delay = 0; // Do not declare this as static, or you will give
// internal linkage to this variable. That means it
// won't be visible from other translation units.
int main(){
UpdateDelay();
std::cout << Delay << std::endl;
return 0;
}
答案 1 :(得分:3)
如果你将static int Delay
放在.h文件中,那么每个.cpp文件都会拥有它自己的唯一实例。
您想使用extern。
test.h
extern int Delay;
void UpdateDelay();
TEST.CPP
#include "test.h"
int Delay = 0;
void UpdateDelay()
{
Delay = 500;
}
答案 2 :(得分:0)
你不能在你的.h中声明static int Delay
。每个cpp会发生什么?它是自己的版本“延迟”
你想要做的是在test.cpp中声明static int在UpdateDelay上方延迟
答案 3 :(得分:0)
在此用法中,关键字static
表示每个cpp文件都有自己的名为Delay
的变量的独立副本。因此UpdateDelay()
更改的不是main()
打印的那个。
如果您想使用单个变量,请改为使用extern
:在标头文件中,添加extern int Delay;
。在一个源文件中,放置int Delay = 0;
。