簡體   English   中英

boost :: function靜態成員變量

[英]boost::function static member variable

我正在嘗試將boost :: function存儲為“引用?”的靜態變量。 從函數中獲取。

該變量如下所示:

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

當我嘗試編譯時,出現錯誤:

錯誤LNK2001:無法解析的外部符號“ public:靜態類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;

如果您從不使用數據成員(從技術上講,如果未使用過 ,請參見C ++ 11 Standard的3.2節),則不需要定義-因此,您將觀察到其行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM