I have a project with multiple header files and .cpp
files.
All of the header files have include guards.
There is a file called Constants.h
where I define some constants. Some of these with defines, some as constant variables.
There are more header-.cpp
-file pairs with code in them. One of these does contain a class, the others don't.
When I include my files into my main file (an arduino sketch), I get a lot of linker errors, claiming there are multiple definitions of some variables.
I read that this mainly occurs when you include .c
or .cpp
files, which I don't do. All the .cpp
files only include their appropriate header files.
I did manage to find multiple solution proposals:
1) inline
:
With functions, inline
can be used to get rid of this problem. However, this is not possible with variables.
2) anonymous namespace
:
This is one of the solutions I used. I put anonymous namespaces around all the problematic definitions I had. It did work, however I do not understand why this works. Could anyone help me understand it?
3) moving definitions into .cpp
files:
This is another approach I used sometimes, but it wasn't always possible since I needed some of my definitions in other code, not belonging to this header file or its code (which I do admit is bad design).
Could anyone explain to me where exactly the problem lies and why these approaches work?