gpt4 book ai didi

c++ - boost::function 静态成员变量

转载 作者:太空宇宙 更新时间:2023-11-04 16:20:55 26 4
gpt4 key购买 nike

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

变量看起来像这样:

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

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

error LNK2001: unresolved external symbol "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 函数保存在静态变量中?

最佳答案

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

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

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

关于c++ - boost::function 静态成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16841813/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com