-1

私はパーサーを書いていて、型情報を std::map に保存することにしました。[] 演算子を使用してアクセスすると、列挙型の値が常に 0 になります。マップは次のように宣言されます。

enum type {Bool, Bool_a, Int_4, Inta_4, Int_8, Inta_8, Float_s, Floata_s, Float_d, Floata_d, Ch_s, Ch_a, Str, Invalid};  

class  kparse_ret{
...  
    std::map<std::string, type  
...  
} ret_data;

そして、次のようなものを使用して設定されます

ret_data.type_list[itemname] = Int_4;  

( itemname は std::string です)
私が抱えている問題は、

ret_data.type_list[data_name]  

私は常に Bool または 0 を取得します (ここでも、data_name は std::string です)。itemname と data_name は、それぞれのコンテキストに到達したときにまったく同じ内容を持っていることがわかっています。さらに、 itemname を使用して再度アクセスすると、設定した値が取得されます。

4

1 に答える 1

0

文字列をマップのキーとして比較する場合、文字列の内容だけでなく、文字列のサイズなども比較されます。

以下は、問題を特定するのに役立ちます。

std::map<std::string, std::string>

std::string key = "KEY";
std::string key2 = "KEY";

key2.resize(100);

「KEY」に何かをマップし、key2 を使用してそれにアクセスすると、期待した値が得られません。

ジャブ

于 2013-07-24T13:36:25.923 に答える