我收到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 ++的新手,我确信我在这里做错了。任何帮助表示赞赏。
答案 0 :(得分:1)
在C ++ 11之前,禁用外部世界功能的唯一方法是将其标记为private
。在这种情况下,他们将rapidjson::Document
私有的复制构造函数作为说“此对象不可复制”的方式。
要解决此问题,您的回调应该通过引用获取文档:
void operator() (std::function<void(rapidjson::Document&)> callback);