C++ – One or more multiply defined symbols found

c

DebugUtil.h

#ifndef DEBUG_UTIL_H
#define DEBUG_UTIL_H

#include <windows.h>

int DebugMessage(const char* message)
{
    const int MAX_CHARS = 1023;
    static char s_buffer[MAX_CHARS+1];

    return 0;
}

#endif

When I try to run this I get this error:

Terrain.obj : error LNK2005: "int
__cdecl DebugMessage(char const *)" (?DebugMessage@@YAHPBD@Z) already
defined in Loodus.obj

Renderer.obj : error LNK2005: "int
__cdecl DebugMessage(char const *)" (?DebugMessage@@YAHPBD@Z) already
defined in Loodus.obj

test.obj : error LNK2005: "int __cdecl
DebugMessage(char const *)"
(?DebugMessage@@YAHPBD@Z) already
defined in Loodus.obj

C:\Users\Tiago\Desktop\Loodus
Engine\Debug\Loodus Engine.exe : fatal
error LNK1169: one or more multiply
defined symbols found

But why does this happen? I have #ifndef #define and #endif in the header so multiple definitions shouldn't happen

Best Answer

Put the definition (body) in a cpp file and leave only the declaration in a h file. Include guards operate only within one translation unit (aka source file), not across all your program.

The One Definition Rule of the C++ standard states that there shall appear exactly one definition of each non-inline function that is used in the program. So, another alternative would be to make your function inline.

Related Topic