Ryan Tuck Ryan Tuck - 2 months ago 28
C++ Question

XCode: duplicate symbol error when using global variable

Here's my code:

A.h

class Foo
{
public:
int bar;
};

Foo myFoo;


main.cpp

#include "A.h"
int main()
{
myFoo.bar = 2;
return 0;
}


Xcode gives me the error (paraphrased):

duplicate symbol _myFoo in main.o & A.o


I'd like to keep the
Foo myFoo
within the A.h file.

So why is XCode throwing this error and how can I rectify it?

Answer

You define the global variable in header and it breaks the one definition rule.
Each TU where you include the header will have its own copy of the object.

You need to use extern keyword:

  1. Declare the object as extern in header.
  2. Define it one and only one source file.
  3. Include the header wherever you want to use the global variable

A.h

extern Foo myFoo;

main.cpp

#include "A.h"

Foo myFoo;

XXXX.cpp

#include "A.h"