2016-03-18 8 views
0

Я использую TinyXML2, и я столкнулся с проблемой с SetAttribute.TinyXML2 SetAttribute не может принять объект String?

Он принимает строковый литерал (т. Е. "001"), но не строковый.

void createDoc(string customerID, string name) { 
    XMLDocument doc; 
    XMLNode * pRoot = doc.NewElement("containerRequirement"); 
    doc.InsertFirstChild(pRoot); 

    XMLElement * p1Element = doc.NewElement("customer"); // Start customer 

    p1Element->SetAttribute("ID", customerID); // not working 
    p1Element->SetAttribute("ID", "001");  // working 

    XMLElement * p2Element = doc.NewElement("name"); 
    cout << "NAME is: " << name << endl; 
    p2Element->SetText(name); 
} 

Просьба просветить меня по этому вопросу.

  • customerID не принимается в качестве строки в отличие от "001" принимается без ошибок. Но оба идентификатора CustomerID и «001» - это строки, почему это происходит?
+0

Пожалуйста, подробно укажите, что означает «не работает». Включите точное сообщение об ошибке, которое вы получите, и точное значение 'customerID'. – Tomalak

ответ

0

Как вы можете видеть, чтение tinyxml2.h среди различных определений SetAttribute является:

void SetAttribute(const char* name, const char* value) { 
    XMLAttribute* a = FindOrCreateAttribute(name); 
    a->SetAttribute(value); 
} 

Следовательно, вам нужно будет изменить свой код для CUSTOMERID следующим образом:

p1Element->SetAttribute("ID", customerID.c_str()); 

где c_str() по существу конвертирует a std :: строка до char * (дополнительную информацию см. ссылку). Для обсуждения причины отсутствия неявного преобразования из std :: string в char *, я приглашаю вас прочитать это post.

Надеюсь, это поможет!

 Смежные вопросы

  • Нет связанных вопросов^_^