C++ 全局变量多重声明

C++ 全局变量多重声明,c++,boost,C++,Boost,我在一个类的头文件中包含一个带有全局boost信号的.h文件,这个类的头文件又包含在主函数的文件中。链接器说信号被多次声明。信号声明被包装在C/C++头文件典型的#ifndef、#define和#endif块中(用于避免多次声明)。 我正在使用Eclipse和gcc #ifndef SIG_HEADER #define SIG_HEADER #include <boost/signal.hpp> boost::signal0 <void> signal1; #endi

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

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

boost::signal0 <void> signal1;

#endif
#ifndef信号头
#定义SIG_头
#包括
boost::信号0信号1;
#恩迪夫

我做错了什么?

您遇到的是链接器错误,而不是编译器错误。所以,预处理器指令在这里帮不了你


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

您得到的是链接器错误,而不是编译器错误。所以,预处理器指令在这里帮不了你


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

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

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


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

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


您在头文件中定义了一个变量。您在头文件中定义了一个变量。谢谢您,我不习惯使用全局变量,所以无法解决这个问题。不过,虽然我将定义一个包含现有boost信号的单例,但我很想知道我遗漏了什么。很好,你不习惯全局变量。谢谢你,我不习惯使用全局变量,所以我无法解决这个问题。然而,尽管我将要定义一个包含现有boost信号的单例,但我很想知道我遗漏了什么。很好,你不习惯全局变量。