0

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

变量如下所示:

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

当我尝试编译时出现错误:

错误 LNK2001:未解析的外部符号“公共:静态类 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 函数保存在静态变量中?

4

1 回答 1

5

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

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

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

于 2013-05-30T16:54:13.247 回答