Problem mit der Eigenschaftsbaumstruktur beim Konvertieren in Unicode

Ok, zunächst einmal bin ich von Natur aus kein C ++ - Entwickler. Ich habe es geschafft, ein paar Sachen zusammenzustellen und es funktioniert gut, aber aus der Sicht eines Experten sieht es wie Müll aus =)

Ich habe also eine Freeware-App erstellt, die den Property Tree aus den Boost-Bibliotheken verwendet. Ich habe die gesamte App (in VS2010) mit dem Use entwickeltMulti-Byte-Zeichensatz Rahmen. Ich entschied, dass es Zeit war, die App zu aktualisieren, um Unicode zu unterstützen, da es einige Leute mit komplexen Zeichensätzen gibt, die ich besser unterstützen möchte.

Ich habe den mühsamen Prozess durchlaufen, bei dem alle Referenzen und Aufrufe geändert wurden, um breite Zeichenfolgen und alle erforderlichen Konvertierungen zu verwenden. Allerdings bin ich an einer Stelle völlig ratlos, die einzigen zwei Compilerfehler, die ich noch habe.

Sie kommen beide ausstream_translator.hpp (/ boost / property_tree /), Zeilen 33 und 36 (wie unten angegeben):

<code>template <typename Ch, typename Traits, typename E, typename Enabler = void>
struct customize_stream
{
    static void insert(std::basic_ostream<Ch, Traits>& s, const E& e) {
        s << e; //line 33
    }
    static void extract(std::basic_istream<Ch, Traits>& s, E& e) {
        s >> e; //line 36
        if(!s.eof()) {
            s >> std::ws;
        }
    }
};
</code>

Der Fehler in Zeile 33 ist:

<code>Error   347 error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'const std::wstring' (or there is no acceptable conversion)   {...}\boost_1_49_0\boost\property_tree\stream_translator.hpp    33  1   
</code>

..und der Fehler in Zeile 36 ist:

<code>Error   233 error C2678: binary '>>' : no operator found which takes a left-hand operand of type 'std::basic_istream<_Elem,_Traits>' (or there is no acceptable conversion) {...}\boost_1_49_0\boost\property_tree\stream_translator.hpp    36  1
</code>

Von dem, was ich rückwärts durchlaufen konnte, kommt es von innenstream_translator.hpp letztendlich als Aufruf zum Abrufen eines Werts beginnen [z. ptree.get ("some.path", "default value here")]

Ich habe wirklich absolut keine Ahnung, wie ich dieses Problem lösen soll, und kann es anscheinend nicht findenetwas Online, um mir zu helfen zu verstehen, was genau das Problem ist. Irgendwelche Tipps oder Infos wäre sehr dankbar.

BEARBEITEN

Also habe ich alles, was mit ptree zu tun hat, auskommentiert, bis es kompiliert wurde, und dann angefangen, es wieder hinzuzufügen. Es stellt sich heraus, dass ich .get fine aufrufen kann. Wo ist das Problem mit der Zeichenfolge?

Um die Sache zu vereinfachen, hier ist die effektive Abfolge der Aufrufe, die in Ordnung sind, bis get_child aufgerufen wird:

<code>boost::property_tree::ptree pt; 
boost::property_tree::read_xml("Config.xml", pt);
int iAppSetting = pt.get("config.settings.AppSetting",1); //<- works fine
ptree ptt;
ptt = pt.get_child("config.Applications"); //<- adding this line causes the line 36 error
</code>

Antworten auf die Frage(1)

Ihre Antwort auf die Frage