2016-04-06 88 views
0

我得到一個std :: function回調函數的編譯錯誤。這裏的類聲明:std :: function回調函數

class Cloud 
{ 
// ... 
public: 
    Cloud (std::string end_point) : end_point(end_point) {} 
    void operator() (std::function<void(rapidjson::Document)> callback); 
}; 

我的回調存儲在私有變量,然後在類的功能,我想引用這樣的回調:

rapidjson::Document document; 
this->callback(document); 

此代碼給我錯誤:

/Users/petilodie/Projects/TheGame/client/Classes/Cloud.cpp:67:20: Calling a private constructor of class 'rapidjson::GenericDocument<rapidjson::UTF8<char>, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator>, rapidjson::CrtAllocator>' 

我是新來的C + +,我敢肯定我在這裏做錯了什麼。任何幫助表示讚賞。

+1

'rapidjson :: Document'是不可拷貝。您需要通過引用將它傳遞給回調。 –

回答

1

在C++ 11之前,禁用外部函數的唯一方法是將其標記爲private。在這種情況下,他們已經將rapidjson::Document的複製構造函數作爲「這個對象不可複製」的一種方式進行私有化。

爲了解決這個問題,你的回調應參照採取文件:

void operator() (std::function<void(rapidjson::Document&)> callback); 
+0

謝謝!代碼在通過引用傳遞參數後成功編譯,但是現在又出現了另一個錯誤。 EXC_BAD_ACCESS,代碼= EXC_i386_GPFLT。你知道這是什麼意思嗎? (我在詢問我的情況) –

+0

我並不熟悉那個確切的錯誤,但它聽起來像是某種東西可能已經超出了範圍。您應該附加調試器並隔離發生這種情況的位置,它可能與回調有關,也可能不相關。 – kfsone

相關問題