命名空间全局变量丢失值 (C++)
namespace global variable losing value (C++)
所以在我的命名空间的 .h 文件中,我有
namespace wtvr{
static Matrix m;
void LoadIdentity(void);
};
在其.cpp文件中,我有
namespace wtvr{
void LoadIdentity(void){
m = Identity();
m.display();// trace for debugging
}
};
其他在主程序中的位置
wtvr::LoadIdentity();
wtvr::m.display();
第一个 display() 从 LoadIdentity() 函数中将单位矩阵打印到屏幕上,但第二个(在函数返回后)显示所有零。为什么我的价值观消失了?我应该以不同的方式实现全球化吗?谢谢
您已在头文件中声明了static Matrix m;
。这意味着包含该标头的每个.cpp文件都将获得自己的 m
版本。
相反,您需要使其成为全局(尽管是命名空间范围的)变量。
在头文件中:
namespace wtvr{
extern Matrix m;
};
在.cpp的任何文件中:
namespace wtvr{
Matrix m;
};
您已将变量声明为 static
,这意味着每个翻译单元(.cpp文件)都有自己的副本。你可能的意思是:
.h 文件:
namespace wtvr{
extern Matrix m; //declare for use from everywhere
void LoadIdentity(void);
}
.cpp文件:
namespace wtvr{
Matrix m; //define in exactly one .cpp file
void LoadIdentity(void)
{
m = Identity();
m.display();// trace for debugging
}
}
是的,您应该以不同的方式进行全局化。
在 .h 文件中:
extern Matrix m;
在其.cpp文件中:
Matrix m;
void LoadIdentity(void)
{
m = Identity();
m.display();
}
无需更改其他文件。 文件范围内的static
意味着每个文件都会获得自己的变量副本,该副本不与其他文件的变量副本链接,这与您想要的相反。
相关文章:
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 当vector是tje全局变量时,c++中vector的内存管理
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 内联函数中具有内部链接的全局变量
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 全局变量 多读取器 一个写入器多线程安全?
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 不同作用域中的静态变量和全局变量
- C++ 在编译时具有函数计算全局变量
- 修改程序的入口点时未调用全局变量的构造函数
- 使用 std::ios_base::Init 正确初始化全局变量
- 为什么我的全局变量似乎没有变化?
- C ++程序如何返回我的数组或写入全局变量
- 为什么我的数组值与此处的全局变量不匹配?
- QT C++中对全局变量的未定义引用
- 跨多个类的全局变量而不会出现重定义错误?
- 赋予全局变量而不是局部变量优先级的函数 - (异常行为)
- C++线程不检测全局变量更改
- 在 elf 文件中查找全局变量的位置
- 包括一个类来定义全局变量参数 c++ :(