Accessing a global static variable from another class

I am working with code that has a global static variable (which is an object) and I need access to it from another class. I have always avoided global variables/functions in general so in this situation I am not sure how to go about it properly.

Just to clear my understand of things, in a global static variable has internal linkage, which means that any source file that includes this particular header will get its own copy of the variable?

EDIT: What I have tried so far is making a function which returns the address of the variable. Unfortunately, that does not seem to be working.

// names were changed but the code is as follows. 
// There is of course other code in the header
namespace SomeNameSpace
{
    static anArray<someObject> variable;
}

NOTE: I cannot change the code in the header where the global static variable is declared. I can add functions but I should try to avoid it if I can.


You can decide on a master version of the container in one .cpp file, and have a function return a reference or pointer to that. Then don't bother with the other copies.

Wrapper.h

 anArray<someObject>& Objects();

Wrapper.cpp

#include "someHeader.h"

anArray<someObject>& Objects()
{ return SomeNameSpace::variable; }

Or make the return value a const reference, if you don't intend to change the values.


When you declare in you header file

static int g_foo;

and include this header file in multiple .cpp files, you get multiple instances one for each .cpp file that includes the header. These instances does not interfere at all. You can't communicate between the compilation units with these variables. Each instance is local to the compilation unit.

When you declare

class Foo
{
    public:
        static int bar;
};

then you get one static member that must be defined in one .cpp file as int Foo::bar; The accessibility is define as public in this case.


If it's declared like this:

MyClass myObj;

then each .cpp-file that in some way includes the header, possibly through other headers, will get a copy, and since they will all have the same name the linker will complain.

However, if it's declared like this:

extern MyClass myObj;

then it's just declared and it will work fine to include the header in multiple files, however it needs to be defined in a .cpp file.

链接地址: http://www.djcxy.com/p/6018.html

上一篇: Moq的意外验证行为

下一篇: 从另一个类访问全局静态变量