2016-02-03 74 views
1

我有一個使用rapidjson JSON解析器的C++類Tester.cpp。C++上下文錯誤

下面是代碼的縮寫版本:

using namespace std; 
using namespace rapidjson; 

int main(int argc, char** argv) 
{ 
    ... 
//Parse the JSON 
      rapidjson::Document document; 
      document.Parse(buffer); 
       add_rules_to_tester(document); 
    ... 
    } 

void add_rules_to_tester(rapidjson::Document document) 
{...} 

我的頭文件Tester.h看起來像下面的(再次略):

using namespace std; 
using namespace rapidjson; 

void add_rules_to_tester(rapidjson::Document document); 

當我註釋掉線add_rules_to_tester主要的方法,我沒有得到任何錯誤。當我取消註釋該行時,出現下面的編譯時錯誤。

In file included from Tester.h:38:0, 
      from Tester.cpp:28: 
rapidjson/document.h: In function ‘int main(int, char**)’: 
rapidjson/document.h:2076:5: 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&); 
^ 
Tester.cpp:163:34: error: within this context 
add_rules_to_tester(document); 
          ^
In file included from Tester.cpp:28:0: 
Tester.h:76:6: error: initializing argument 1 of ‘void add_rules_to_tester(rapidjson::Document)’ 
void add_rules_to_tester(rapidjson::Document document); 

有什麼建議,問題可能是什麼?在我看來,我誤解了命名空間的使用,但是讓我知道是否有任何其他信息可以提供。謝謝!

回答

2
rapidjson/document.h: In function ‘int main(int, char**)’: 
rapidjson/document.h:2076:5: 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&); 

編譯器告訴你,複製構造GenericDocument被聲明爲私有的,所以你不能用它GenericDocument類之外。

您在此聲明,要求拷貝構造函數,而把它當作參數通過創建副本:

add_rules_to_tester(document); 

解決方案:

document對象引用。

void add_rules_to_tester(rapidjson::Document& document) //Note & here 
{...} 

並把它作爲add_rules_to_tester(document);

+0

謝謝,我試圖通過引用傳遞,但我得到了以下錯誤:Tester.cpp:163:35:錯誤:類型的非const引用無效初始化「rapidjson ::類型'rapidjson :: Document * {又名rapidjson :: GenericDocument > *}的右值的文檔和{aka rapidjson :: GenericDocument >&}'' add_rules_to_tester (&文件); – user3772960

+0

將const添加到聲明中並沒有幫助。 void add_rules_to_tester(const rapidjson :: Document&document) – user3772960

+0

void add_rules_to_tester(const rapidjson :: Document&document)確定。請像這樣調用它:add_rules_to_tester(document); – CreativeMind