On Mon, Nov 16, 2020 at 01:38:01PM +0000, Will J Godfrey wrote:
I just did a search of the whole of src. It's
*used* about a dozen times
across 5 otherwise unrelated .cpp files, but is only defined here. Just to be
certain, I did a make clean before trying this again, and it's definitely saying
multiple defs
As I understand things,
extern int x;
extern const int x;
_declare_ x. That means it tells the compiler that x is _defined_ (as
below) somewhere else. It does not create x.
OTOH
int x;
int x = 123;
const int x = 123;
_define_ x. That means that a variable 'x' is created. If this is done
at global scope (i.e. not inside a function or class), and there is more
than one such definition, you should get a 'multiple definition' error
from the linker. If there is no such definition, you should get an
'undefined' linker error if any compilation unit refers to x.
So you should have _exactly_ one definition (this is why definitions
should not be in a header file), and you can have as many declarations
as needed.
For things like your ADD_COLOUR, there are two approaches:
* define and initialise it as a 'const int' in single compilation unit
(e.g. globals.cpp), and declare it as external in a header file (e.g.
globals.h) that gets included by all other compilation units that need
it.
or
* Just #define it in a header (e.g. globals.h) instead of creating
a variable.
Ciao,
--
FA