FileA.hpp:
static int a;
void change(int);
FileA.cpp
#include "FileA.hpp"
void change(int x) { a = x; }
main.cpp
#include "FileA.hpp"
#include <cstdlib>
#include <iostream>
int main()
{
a = 5;
std::cout<<a<<std::endl;
change(10);
std::cout<<a<<std::endl;
a = 20;
std::cout<<a<<std::endl;
system("Pause");
return 0;
}
我的输出是:
5
5
20
有人可以帮我解决这个问题吗?为什么变量'a'不想改变功能 在 FileA.cpp 中。 如何解决这个问题。当我在“FileA.hpp”中进行内联更改(int x)时,它工作正常。
最佳答案
全局变量上的 static
关键字提供了该变量的内部链接。这意味着任何具有该定义的翻译单元都将拥有该对象的自己的拷贝。所以 main.cpp
看到的 a
对象和 FileA.cpp
看到的是不同的对象。 change
将修改其中一个,但 main
将输出另一个。
如果您打算 static
表示对象具有静态存储持续时间,则全局变量(或一般命名空间范围内的变量)无论如何都具有静态存储持续时间。您不需要将它们标记为 static
。但是,如果您删除 static
,则会遇到另一个问题;您将在翻译单元中对 a
进行多个定义。
正确的做法是在 FileA.hpp
文件中将 a
声明为 extern
:
extern int a;
然后在单个翻译单元中(可能在FileA.cpp
中,定义对象:
int a;
这意味着任何包含 FileA.hpp
的对象都将具有 a
的声明(这很好)并且只有一个翻译单元将具有 的定义>一个
。完美。
关于c++ - 静态变量 cpp 不想改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16079235/