为什么我得到:即使我使用包含警卫的多重定义

时间:2013-07-28 07:12:50

标签: c++ header linker

input.h中我定义了eventFunctions,如下所示:

multimap <Uint8, function<void(SDL_Event&)>> eventFunctions;

Input.h被包围:

#ifndef INPUT_H
#define INPUT_H
//code
#endif

然而,在编译时我得到了这个:multiple definition of eventFunctions 引用包含input.h的每个文件。 我还将它添加到input.h中以查看在编译期间处理它的次数:#warning "entered input_h"警告打印多次(每次包含它),表明尽管有包含警卫,它仍被处理多次。
我做错了什么?

1 个答案:

答案 0 :(得分:4)

头文件应包含声明,而不是定义。定义应该在单个C ++文件中,而不是全部。你应该做的是有一个带有这个定义的单个C ++文件,并在标题中使用“extern”声明。

有关更多解释,请参阅此答案: How do I use extern to share variables between source files?