Reputation: 1583
What I want to do is just define a variable in a header file and use it in two different cpp files without redefining that variable each time I include that header.
Here is how I tried:
Variables.h
#ifndef VARIABLES_H // header guards
#define VARIABLES_H
static bool bShouldRegister;
#endif
(I also tried extern
but nothing changed)
And in a cpp file I give it a value ::bShouldRegister = true
or bShouldRegister = true;
In my other cpp file I check it's value by creating a thread and checking its value in a loop (and yes my thread function works well)
while (true)
{
if (::bShouldRegister) // Or if (bShouldRegister)
{
MessageBox(NULL,"Value Changed","Done",MB_OK|MB_ICONINFORMATION);
}
Sleep(100);
}
And yes, that MessageBox
never appears (bShouldRegister
never gets set to true :/)
Upvotes: 67
Views: 119893
Reputation: 56479
You should use extern
, otherwise you will have separated bShouldRegister
variables in each translation unit with probably different values.
Put this in a header file (.h
):
extern bool bShouldRegister;
Put this in one of the implementation files (.cpp
):
bool bShouldRegister;
Another way which is simpler is to use inline
keyword. Put your variable in a header file as below:
inline bool bShouldRegister;
Upvotes: 99
Reputation: 10238
A more C++-like way would be using a class member, syntactically indicated by the static
keyword. Class member variables have implicit external
linkage.
#ifndef VARIABLES_H
#define VARIABLES_H
class RegUtil {
public:
static bool bShouldRegister;
};
#endif
in one of your cpp files (maybe variables.cpp
), you have to define this class member:
#include "variables.h"
bool RegUtil::bShouldRegister;
Upvotes: 22
Reputation: 450
If you can use C++17, consider using an inline variable:
// in a header file
inline bool bShouldRegister = true;
See How do inline variables work? for more information.
Upvotes: 35
Reputation: 216
Here you need to define bool bShouldRegister in one class. Your header file should like this.
#ifndef VARIABLES_H // header guards
#define VARIABLES_H
class abc{
public:
bool bShouldRegister;
abc();
#endif
Now initialize bShouldRegister variable in cpp file in constructor of abc class and then use this variable in your second cpp file using object of class. You will get your message box.
Upvotes: -3
Reputation: 363487
You need to define the variable in one of the modules:
bool bShouldRegister;
Then declare it extern
(not static
!) in the header:
extern bool bShouldRegister;
Upvotes: 11