全局变量多重声明

时间:2012-07-08 20:54:31

标签: c++ boost

我在一个类的头文件中包含一个带有全局增强信号的.h文件,该文件又包含在主函数的文件中。链接器表示信号已多次声明。信号声明包含在典型的C / C ++头文件的#ifndef#define#endif块中(用于避免多次声明)。 我正在使用Eclipse和gcc。

#ifndef SIG_HEADER
#define SIG_HEADER
#include <boost/signal.hpp>

boost::signal0 <void> signal1;

#endif

我做错了什么?

2 个答案:

答案 0 :(得分:4)

您收到链接器错误,而不是编译器错误。因此,预处理程序指令对您没有帮助。

您需要做的是在源文件中定义变量(而不是头文件),并在头文件中使用extern声明。

答案 1 :(得分:2)

您的链接器是正确的。每次包含此标头时,都会定义符号signal1,从而导致多重定义错误。

为了解决问题,extern关键字将告诉编译器这是一个将被整个程序访问并需要外部链接的对象。然后,您必须在其他地方为编译器提供变量的定义,例如此标头的cpp文件。

This question offers some more information about external linkage.

相关问题