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