我正在尝试将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函数?
答案 0 :(得分:5)
您缺少静态数据成员的定义(您的类定义中只有该成员的声明)。将以下内容放在命名空间范围内:
boost::function<void( const wchar_t*, const bool)> ConverterApp::s_logMessage;
如果您从不使用数据成员(从技术上讲,如果它不是 odr-used ,请参阅C ++ 11标准的第3.2段),则不需要定义 - 因此行为你正在观察。