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.
If you are in a single-threaded environment, and you just want to get a value out of a class, use a getter for that value. If it isn't calculated in a "lazy" fashion, i.e. the class calculates it instantly, you can put that logic in the class's constructor.
A static variable can be accessed inside any other class using the class name.
Static variables in C have the following two properties: They cannot be accessed from any other file. Thus, prefixes “ extern ” and “ static ” cannot be used in the same declaration. They maintain their value throughout the execution of the program independently of the scope in which they are defined.
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 defined as public in this case.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With