Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我会得到:多重定义,即使我使用include gaurds_C++_Header_Linker - Fatal编程技术网

C++ 为什么我会得到:多重定义,即使我使用include gaurds

C++ 为什么我会得到:多重定义,即使我使用include gaurds,c++,header,linker,C++,Header,Linker,在input.h中,我定义了如下事件函数: multimap <Uint8, function<void(SDL_Event&)>> eventFunctions; 然而,在编译时,我得到了这样的结果:eventFunctions的多个定义 引用包含input.h的每个文件。 我还将其添加到input.h中,以查看编译过程中它被处理了多少次:#warning“entered input_h”该警告打印了几次(每次都包括在内),表明尽管有include防护,它仍被

input.h
中,我定义了如下事件函数:

multimap <Uint8, function<void(SDL_Event&)>> eventFunctions;
然而,在编译时,我得到了这样的结果:
eventFunctions的多个定义
引用包含
input.h
的每个文件。 我还将其添加到input.h中,以查看编译过程中它被处理了多少次:
#warning“entered input_h”
该警告打印了几次(每次都包括在内),表明尽管有include防护,它仍被处理了不止一次。

我做错了什么?

头文件应该包含声明,而不是定义。定义应该在单个C++文件中,而不是全部。您应该做的是,使用一个具有这个定义的C++文件,并在页眉中使用“Extn”声明。 有关更多解释,请参见此答案:
头文件应该包含声明,而不是定义。定义应该在单个C++文件中,而不是全部。您应该做的是,使用一个具有这个定义的C++文件,并在页眉中使用“Extn”声明。 有关更多解释,请参见此答案:

#ifndef INPUT_H
#define INPUT_H
//code
#endif