2017-02-25 24 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 

예상 출력은 두 번째 방출 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에서 정상적으로 작동합니다.