2017-02-25 41 views
1

YAML-cppライブラリを使用してYAMLノードからサブノードを削除することはできません。これは私がしようとしているコードです:yaml-cppでノードを名前で削除する

YAML::Node y = YAML::Load("\ 
    a: first\n\ 
    b: second\n\ 
    c: \n\ 
     d: third\n\ 
     e: \n\ 
      f: fourth\n\ 
      g: fifth\n\ 
    "); 
    cout << y; 
    cout << endl << endl; 
    y.remove(y["b"]); 
    cout << y; 
    cout << endl; 

、これが出力されます:

a: first 
c: 
    e: 
    g: fifth 
    f: fourth 
    d: third 
b: second 

a: first 
c: 
    e: 
    g: fifth 
    f: fourth 
    d: third 
b: second 

予想される出力は、第2の放射されたYAMLストリームは、「B」の要素が含まれていないことをする必要がありながら、 。

私はここで何が欠けていますか?ありがとう:)

答えて

1

yaml-cpp 0.5.2でnode.remove()が破損していることが判明しました。これは、Ubuntu Xenialと他の多くのディストリビューションの現在のバージョンです。 (https://github.com/jbeder/yaml-cpp/issues/338

コードは次のようになります。

YAML::Node y = YAML::Load("\ 
a: first\n\ 
b: second\n\ 
c: \n\ 
    d: third\n\ 
    e: \n\ 
     f: fourth\n\ 
     g: fifth\n\ 
"); 
cout << y; 
cout << endl << endl; 
y.remove("b"); 
cout << y; 
cout << endl; 

のでremoveの正しいパラメータはもともとコンパイルされませんでした、(私はマップから削除てることを考えると)文字列は次のとおりです。

/usr/include/yaml-cpp/node/impl.h:392:58: required from ‘bool YAML::Node::remove(const Key&) [with Key = char [2]]’ 
/turbine/turbine/src/components/yaml-test.cpp:51:15: required from here 
/usr/include/yaml-cpp/node/detail/impl.h:136:15: error: ‘equals’ was not declared in this scope 
if (equals(*it->first, key, pMemory)) { 
... 

でも、0.5.3で正常に動作します。

関連する問題