Use of overloaded operator ‘[]’ is ambiguousでハマった話。

c++の話です。

スクリーンショット 2014-12-11 17.43.15

以下の様な変数を用意しました。

const rapidjson::Value& objects = new rapidjson::Value();

これが配列だと仮定し、最初のオブジェクトを取り出したいとします。

const rapidjson::Value& firstObject = objects[0];

こんな要領ですね。

しかし、掲題のエラーが出てコンパイルが通りません。

しかも何がややこしいって0だけだめで1だとこのエラーは出ないんです。

unsignedであれ


そんなこんなで、解決にかなり時間がかかってしまったんですが、どうやら

rapidjson::Valueの中身を参照する場合、添字はunsignedである必要

があり、signedだとこのようなエラーが出る様です。

よって、正解は以下の形です。

const rapidjson::Value& firstObject = objects[static_cast<rapidjson::SizeType>(0)];

SizeTypeはどうやらただのunsigned再定義でした。

typedef unsigned SizeType;

誰かのお役に立てば。