0

我正在尝试更新静态 int

测试.h

static int Delay = 0;
void UpdateDelay();

测试.cpp

#include "test.h"

void UpdateDelay(){
Delay = 500;
}

主文件

    #include "test.h"

    int main(){
    UpdateDelay();
    std::cout << Delay << std::endl;
    return 0;

}

输出应该是:500,但它显示:0

谢谢

4

4 回答 4

6

声明为的全局变量static具有内部链接。这意味着每个翻译单元(即.cpp文件)都会获得该变量的私有副本。

对一个翻译单元的私有副本所做的更改不会对不同翻译单元持有的同一变量的私有副本产生任何影响。

如果您想共享一个全局变量,请在单个翻译单元中为其提供一个定义,并让所有其他翻译单元通过指定关键字的声明来引用它:extern

测试.h

extern int Delay;
void UpdateDelay();

测试.cpp

#include "test.h"

void UpdateDelay(){
    Delay = 500;
}

主文件

#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;
}
于 2013-02-19T20:38:16.917 回答
3

如果您放入static int Delay.h 文件,则每个 .cpp 文件都将拥有自己的唯一实例。

你想使用外部。

测试.h

extern int Delay;
void UpdateDelay();

测试.cpp

#include "test.h"
int Delay = 0;

void UpdateDelay()
{
    Delay = 500;
}
于 2013-02-19T20:39:23.033 回答
0

你不能static int Delay在你的.h中声明每个cpp会发生什么是它自己版本的“延迟”

你想要做的是在 test.cpp 中声明静态 int Delay 就在你的 UpdateDelay 之上

于 2013-02-19T20:38:17.700 回答
0

在这种用法中,关键字static意味着每个 cpp 文件都有一个名为Delay. 所以UpdateDelay()改变的不是main()打印的。

如果要使用单个变量,请extern改为:在头文件中,将extern int Delay;. 在一个源文件中,放入int Delay = 0;.

于 2013-02-19T20:40:00.007 回答