2016-04-06 23 views
0

Std :: function geri çağırma ile bir derleme hatası alıyorum.std :: function ile geri aramalar

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

Özel bir değişkende geri arama depolamak ve daha sonra sınıfın bir işlevi böyle geri arama çağırmak çalışıyorum:

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

Bu kod bana verir İşte sınıf ilanıdır hata:

/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++ için yeni ve eminim burada yanlış bir şey yapıyorum. Herhangi bir yardım takdir edilir.

+1

'rapidjson :: Document' copyable değildir. Referans ile geri bildirime iletmeniz gerekir. –

cevap

1

C++ 11'den önce, dış dünyaya bir işlevi devre dışı bırakmanın tek yolu, private işaretlemekti. Bu durumda, rapidjson::Document için kopya yapıcıyı "bu nesne kopyalanamaz" şeklinde özel hale getirdiler. Bunu çözmek için

, geri arama referans olarak Dokümanı almalıdır:

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

Teşekkürler! Kod, argümanı referans olarak geçtikten sonra başarıyla derler ama şimdi başka bir hata aldım. EXC_BAD_ACCESS, Kod = EXC_i386_GPFLT. Bunun ne anlama geldiğini biliyor musun? (Benim durumumun bağlamında soruyorum) –

+0

Bu tam hata ile aşina değilim ama bir şey belki de kapsam dışı gitti gibi geliyor. Hata ayıklayıcıyı iliştirmeli ve bunun olduğu yerde yalıtmalısınız, geri arama ile ilgili olabilir veya olmayabilir. – kfsone

İlgili konular