升压::功能静态成员变量(boost::function static member variabl

2019-10-30 10:09发布

我想存储一个boost ::功能的静态变量,其中“参考?” 是从一个函数取出。

变量看起来是这样的:

static boost::function<void( const wchar_t*, const bool)> s_logMessage;

当我尝试编译我得到的错误:

错误LNK2001:无法解析的外部符号 “公用:静态类boost ::功能Gorbatras_Converter :: ConverterApp :: s_logMessage”(?s_logMessage @ ConverterApp @ Gorbatras_Converter @@ 2V $ @功能$$ A6AXPB_W_N @ Z @升压@@ A)

我注意到,如果我不使用变量,我可以编译它没有这个错误(猜这是一个编译器的优化,因为它没有使用),但只要我尝试使用s_logMessage可变我得到的链接错误。

我的设置s_logMessage的方式是这样的:

const int ConverterApp::RunConverter( boost::function<void( const wchar_t* a_message, const bool a_newLine)> a_logMessage )
{
    ConverterApp::s_logMessage = a_logMessage;    
    ...
}

我试着将它设置为一个非静态成员变量,然后它似乎工作。 但我需要它作为静态的,否则我可能只是藏汉一起把它作为,因为它的将是一个很大的功能,我不希望有一个参数。

如果你想知道为什么我发送日志功能参数,这是因为它来自一个单独的程序。

所以,我需要什么帮助,是我怎么救了boost :: function函数在一个静态变量?

Answer 1:

您缺少的静态数据成员的定义 (你只有该成员在类定义的声明 )。 将在命名空间范围如下:

boost::function<void( const wchar_t*, const bool)> ConverterApp::s_logMessage;

如果你从来没有使用数据成员(从技术上讲,如果它不是ODR使用的 ,看到C ++ 11标准第3.2),则不需要定义-因此你的行为正在观察。



文章来源: boost::function static member variable
标签: c++ boost