Multiple definition error on variable that is declared and defined in header file and used only in its cpp file

后端 未结 3 1519
盖世英雄少女心
盖世英雄少女心 2021-01-23 05:17

I\'m in the process of moving code written to be compiled for one chip onto another chip.

One issue that\'s come up is a multitude of multiple definition errors. Some of

3条回答
  •  北海茫月
    2021-01-23 06:14

    If you declare your variable in the header file:

    #ifndef GLOBAL_H
    #define GLOBAL_H
    
    int foo = 0;
    
    #endif
    

    In every include of your header file or translation unit, a new instance of your integer is created. As you mentioned, to avoid this, you need to declare the item as "extern" in the header file and initialize it in the implementation file:

    // .h
    extern int foo;
    
    // .cpp
    int foo = 0
    

    A more C++ way to do that can be something like this:

    #ifndef GLOBAL_H
    #define GLOBAL_H
    
    struct Global {
        static int foo;
    };
    #endif
    

    And in your cpp file:

    #include "variables.h"
    
    int Global::foo = 0;
    

    C++17 fixes this problem with inline variables, so you can do:

    #ifndef GLOBAL_H
    #define GLOBAL_H
    
    inline int foo = 0;
    
    #endif
    

    See How do inline variables work? for more information.

提交回复
热议问题