boost :: function静态成员变量

时间:2013-05-30 16:52:49

标签: c++ boost

我正在尝试将boost :: function存储为静态变量,其中“reference?”是从函数中获取的。

变量如下所示:

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

当我尝试编译时,我收到错误:

  

错误LNK2001:未解析的外部符号“public:static class boost :: function Gorbatras_Converter :: ConverterApp :: s_logMessage”(?s_logMessage @ ConverterApp @ Gorbatras_Converter @@ 2V?$ function @ $$ A6AXPB_W_N @ Z @ boost @@ 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函数?

1 个答案:

答案 0 :(得分:5)

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

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

如果您从不使用数据成员(从技术上讲,如果它不是 odr-used ,请参阅C ++ 11标准的第3.2段),则不需要定义 - 因此行为你正在观察。