从另一个类访问全局静态变量
我正在使用具有全局静态变量(这是一个对象)的代码,我需要从另一个类访问它。 我一直总是避免使用全局变量/函数,所以在这种情况下我不确定如何正确地执行它。
为了清楚我对事物的理解,在全局静态变量中有内部链接,这意味着包含这个特定头文件的任何源文件都将获得它自己的变量副本?
编辑:我到目前为止所尝试的是使一个函数返回变量的地址。 不幸的是,这似乎并没有奏效。
// names were changed but the code is as follows.
// There is of course other code in the header
namespace SomeNameSpace
{
static anArray<someObject> variable;
}
注意:我无法更改声明全局静态变量的标头中的代码。 我可以添加功能,但如果可以的话,我应该尽量避免。
您可以在一个.cpp文件中决定容器的主版本,并且有一个函数返回一个引用或指针。 然后不要打扰其他副本。
Wrapper.h
anArray<someObject>& Objects();
Wrapper.cpp
#include "someHeader.h"
anArray<someObject>& Objects()
{ return SomeNameSpace::variable; }
或者,如果您不打算更改这些值,则将返回值设为const引用。
当你在头文件中声明时
static int g_foo;
并将此头文件包含在多个.cpp文件中,那么对于每个包含头文件的.cpp文件,您都会得到多个实例。 这些实例根本不会干涉。 编译单元之间不能通过这些变量进行通信。 每个实例对编译单元都是本地的。
当你声明
class Foo
{
public:
static int bar;
};
那么你得到一个静态成员,必须在一个.cpp文件中定义为int Foo::bar;
在这种情况下,可访问性被定义为公共的。
如果它是这样声明的:
MyClass myObj;
那么每个包含头文件的.cpp文件(可能通过其他头文件)都会得到一个副本,并且由于它们都将具有相同的名称,因此链接器会投诉。
但是,如果它是这样声明的:
extern MyClass myObj;
那么它只是声明,它可以很好地将头部包含在多个文件中,但是它需要在.cpp文件中定义。
链接地址: http://www.djcxy.com/p/6017.html