2017-02-13 528 views
1

我將指針傳遞給rapidjson::Document作爲參數。C++ - 將rapidjson :: Document作爲參數傳遞給函數

foo(rapidjson::Document* jsonDocument) 
{ 
    std::cout << jsonDocument["name"] << std::endl; 
} 

但我不能做jsonDocument["name"]來訪問name屬性。

嘗試不使用指針會導致錯誤:

error: 'rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>::GenericDocument(const rapidjson::GenericDocument<Encoding, Allocator, StackAllocator>&) [with Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>; StackAllocator = rapidjson::CrtAllocator]' is private 
GenericDocument(const GenericDocument&); 

有人能幫助我嗎?

+2

找不到欺騙,但也有不少。總之,在使用它之前,需要像使用'(jsonDocument)[「name」]'或'jsonDocument [0] [「name」]'或者使用'rapidjson :: Document&jsonDocument'這樣的引用來解引用指針。 – nwp

+0

使用參考是最好的解決方案。 –

回答

0

使用引用或值作爲參數。使用帶指針的[]將嘗試像使用文檔數組一樣使用文檔。參考或值將調用預期的操作員。

// a const reference 
foo(const rapidjson::Document& jsonDocument) { 
    std::cout << jsonDocument["name"] << std::endl; 
} 

// a copy (or move) 
foo(rapidjson::Document jsonDocument) { 
    std::cout << jsonDocument["name"] << std::endl; 
} 

我建議你使用的參考,爲你的函數不需要消耗任何資源,在文檔中,但只能觀察和打印值。

這個函數的調用看起來像這樣:

rapidjson::Document doc = /* ... */; 

foo(doc); 
+0

謝謝,我使用了一個const引用。 –

相關問題