C++: Multiple definition error for global functions in the header file

后端 未结 5 1443
陌清茗
陌清茗 2021-02-12 17:52

This function is global and is defined in the header file (temporarily I want to keep it there).

The header file also constitutes a particular class which has i

5条回答
  •  甜味超标
    2021-02-12 18:13

    If you put a function in the header it will be generated for each c/cpp file that includes that header leading to duplicates. Making it inline will help.

    Edit, explanation

    Header guards as the #ifndef, #define ... #endif construction is often called only prevent double and recursive inclusion in a single cpp file. This is relevant in the case where a source file includes headers A and B and B also includes A. Recursive inclusion would happen if A also included B.

    Your problem arises because you have multiple .cpp files. During compilation of one cpp the compiler doesn't know about the existence of the other cpp files.

    Notice that #include, #ifdef and friends are preprocessor directives. Preprocessing happens on source files before compilation (thought it is often regarded and done as part of the compilation process). The preprocessor basically is a text processor. For instance an #include is textually replaced with the contents of the header file. Contents of #ifdefs that evaluate to false are removed from the code. The actual compiler gets one single big file consisting of the cpp and all referenced include files which it translates into an object file.

提交回复
热议问题