命名空间全局变量丢失值(C++)

use*_*058 3 c++ variables static namespaces global

所以在我的命名空间的.h文件中,我有

namespace wtvr{
    static Matrix m;
    void LoadIdentity(void);
};
Run Code Online (Sandbox Code Playgroud)

在我的.cpp文件中,我有

namespace wtvr{
    void LoadIdentity(void){
        m = Identity();
        m.display();// trace for debugging
    }
};
Run Code Online (Sandbox Code Playgroud)

否则在主程序中

wtvr::LoadIdentity();
wtvr::m.display();
Run Code Online (Sandbox Code Playgroud)

第一个display()从LoadIdentity()函数中将标识矩阵打印到屏幕,但是第二个(在函数返回后)显示全零.为什么我的价值观消失了?有没有不同的方式我应该做我的全球?谢谢

Jon*_*ter 5

您已static Matrix m;在头文件中声明.这意味着包含该标头的每个.cpp文件都将获得自己的版本m.

相反,你需要使它成为一个全局(虽然命名空间范围)变量.

在头文件中:

namespace wtvr{
extern Matrix m;
};
Run Code Online (Sandbox Code Playgroud)

在任何.cpp文件中:

namespace wtvr{
Matrix m;
};
Run Code Online (Sandbox Code Playgroud)