全局变量多重声明
问题描述:
我在一个类的头文件中包含一个带有全局提升信号的.h文件,该文件又被包含在主函数的文件中。链接器说这个信号是多次声明的。信号声明封装在典型的C/C++头文件(用于避免多重声明)的#ifndef
,#define
和#endif
块中。 我使用Eclipse和gcc。全局变量多重声明
#ifndef SIG_HEADER
#define SIG_HEADER
#include <boost/signal.hpp>
boost::signal0 <void> signal1;
#endif
我做错了什么?
答
您的链接是正确的。每次包含此头文件时,符号signal1都会被定义,导致多重定义错误。
为了解决问题,关键字extern
将告诉编译器这是一个对象,整个程序将访问该对象并需要外部链接。然后你必须给编译器一个其他地方的变量定义,就像在这个头文件的cpp文件中一样。
This question offers some more information about external linkage.
答
你会得到一个链接器错误,而不是编译器错误。所以,预处理指令在这里不会帮助你。
你需要做的是在源文件中定义变量(而不是头文件),并在头文件中使用extern
声明。
您正在头文件中定义一个变量。 – 2012-07-08 20:57:54