duplicate symbol error C++

If this is in a header file, you’re defining xyz every time you #include it.

You can change the declaration as @R Samuel Klatchko shows. The usual way (if the data isn’t const) is like this:

In Abc.h:

extern char *xyz;

In Abc.cpp:

char *xyz = "xyz";

Edited to add

Note that header guards will not solve this problem:

#ifndef XYZ_H
#define XYZ_H
...
#endif

Header guards prevent “redefinition” errors, where the same symbol appears twice in the same compilation unit. That’s a compiler error.

But even with header guards the definition of xyz will still appear in every source file that includes it, causing a “duplicate symbol” error, which is a linker error.

It would have been more helpful if the original poster had mentioned that, of course.

Leave a Comment