Multiple Definition (LNK2005) errors

前端 未结 3 1010
难免孤独
难免孤独 2020-12-12 07:21

I recently tried to create a global header file which would have all definitions of error codes (i.e. NO_ERROR, SDL_SCREEN_FLIP_ERROR, etc.) these would just be integers whi

相关标签:
3条回答
  • 2020-12-12 07:56

    Do not declare variables inside your header file.
    When you declare a variable in header file a copy of the variable gets created in each translation unit where you include the header file.

    Solution is:
    Declare them extern inside one of your header file and define them in exactly one of your cpp file.

    globals.h:

    extern int SCREEN_LOAD_ERROR;
    extern int NO_ERROR;
    

    globals.cpp:

    #include "globals.h"
    int SCREEN_LOAD_ERROR = 0;
    int NO_ERROR = 0;
    

    main.cpp:

    #include "globals.h"
    

    cTile.h:

    #include "globals.h"
    
    0 讨论(0)
  • 2020-12-12 08:10

    You could simply use an enum:

    globals.h:

    enum
    {
        SCREEN_LOAD_ERROR = 1,
        NO_ERROR = 0,
        // ...
    }
    
    0 讨论(0)
  • 2020-12-12 08:17

    using #ifndef works fine.(Although it works, this is not best practice). try like this:

    globals.h

    #ifndef GLOBALS
    #define GLOBALS
    
    int SCREEN_LOAD_ERROR = 1;
    int NO_ERROR = 0;
    
    #endif
    

    cTile.h:

    #include "globals.h"
    
    class cTile {
    };
    

    main.cpp:

    #include "globals.h"
    #include "cTile.h"
    /* rest of the code */
    
    0 讨论(0)
提交回复
热议问题