Frage

Ich habe Mühe, herauszufinden, warum Code mit dem folgenden Snippet nicht kompiliert wird. Es mag etwas geben, das ich über Klassenvorlagen nicht verstehe (dh die typedef typenname Sache), aber ich glaube nicht, dass dies in diesem speziellen Fall ist.

template<typename data_type>
class GlobalStore {

private:
    typedef boost::property_tree::basic_ptree<
        std::string,
        data_type,
        std::less<std::string>
    > _StorageTreeType;

    _StorageTreeType _store;

public:
    // snip

    template<typename T>
    const T Get(_StorageTreeType & st, const std::string & name)
    {
        return st.get<T>(name);  //Compilation chokes here
    }
};

Ich habe genau das gleiche Setup verwendet, obwohl ich außerhalb einer Vorlagenklasse (aber immer noch eins verwendet habe genau identisch Linie zu dem oben gezeigten). Der Compiler (GCC/Mingw) -Fehler ist

Erwarteter primärer Ausdruck vor '>' Zeichen

Wenn ich ersetze T mit int oder etwas in dieser Zeile, das es immer noch nicht kompiliert ("erwartete primäre Ausdruck zuvor int").

Irgendwelche Gedanken? Boost :: Ptree -Dokumentation ist bei http://www.boost.org/doc/libs/release/boost/property_tree/ptree.hpp

War es hilfreich?

Lösung

Veränderung

return st.get<T>(name);

zu

return st.template get<T>(name);

Weitere Informationen finden Sie in dieser FAQ: Was ist der ->template, .template und ::template Syntax über?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top