2017-02-15 4 views
0

rapidjsonドキュメントを比較しようとしていますが、修正方法がわからないというエラーメッセージが表示されます。rapidjsonドキュメントのエラーエラーを比較していません。operator []がこれらのオペランドと一致します。

これはrapidjsonです:

static const std::string& JSON() 
    { 
     static const std::string j = 
     "{" 
      "\"SimpleCompany:Manager\":{" 
       "\"read\":\"true\"" 
       "\"update\":\"true\"" 
       "\"delete\":\"true\"" 
       "\"insert\":\"false\"" 
      "}," 
      "\"SimpleCompany:Manager\":{" 
       "\"read\":\"true\"" 
       "\"update\":\"true\"" 
       "\"delete\":\"false\"" 
       "\"insert\":\"false\"" 
      "}," 
     "}"; 

     return j; 
    } 

私はおそらく同じ内容で二つの文書を比較してみてください場所です:正しくそれらの値を比較する方法を

rapidjson::StringStream strStream(JSON().c_str()); 
rapidjson::Document origDocument; 
origDocument.ParseStream(strStream); //newDocument obtained other way 
ASSERT_TRUE(newDocument["read"] == origDocument["read"]); //error no operator [] matches these operands 
ASSERT_TRUE(strcmp(newDocument["read"] , origDocument["read"])); //error no operator [] matches these operands 
const rapidjson::Value& a1 = newDocument["read"]; //error no operator [] matches these operands 

任意のアイデア?私は2つの方法を試みたが、彼らは[。

マイルは、equality operatorがあると言います。私はrapidjson tutorialのようなものを比較しているようですが、キーを期待値と比較していますが、2つの文書のキーを比較して平等を判断しています。

答えて

0

同様の問題が発生しました。 確認する/試してください:

1)あなたのコードブロックにusing namespace rapidjson;がありますか?私はあなたのorgiDocument宣言でrapidjson::を使用しているのを見ているからではありません。私はこの問題の一部が名前空間の衝突と同じくらい簡単だと信じています。 (コンパイラは、あなたがrapidjsonのオーバーロードされた[]演算子を使用しようとしていることを知らないと思います...)

2)私が示唆したいのは、newDocument["read"].GetBool()を使って、 「読み取り」キーを押す。私はこのチュートリアルに従っている間にコードを実行しようとする際に問題を抱えていました。これらの 'Get'メソッドを使用して、実際に値を返すことができました。

希望すると便利です。

0
  1. newDocumentの種類は何ですか。どのように作成しますか?私はあなたのコードを(origDocumentと同じ方法でNewDocumentを作成して)実行してみました。最初の==アサーションが機能しました。 newDocumentが普通のrapidjson::Documentの場合は、const rapidjson::Value& a1 = newDocument["read"];という行をコンパイルする必要があります。

  2. 2つ目のアサーションは、2つのrapidjson Valueオブジェクトにstrcmpしようとしているので、コンパイルされないことが予想されます。代わりに、それぞれ.GetString()を使用して値からconst char*の内容を取得する必要があります。

はちょうどあなたが動作するはずです何をしたいのか、明確にします

  • (実際GenericValueのサブクラスである)Documentためoperator[]GenericValueオブジェクト参照を返します。

  • GenericValuesと期待される演算子==および!=を比較できます。 「等しいかどうか等しい」演算子「in the docs」を参照してください。

関連する問題