2016-03-05 1 views
1

J'ai le code suivant:déclaration avant de typedef

namespace boost { 
    namespace property_tree { 
     template<class Key, class Data, class KeyCompare> 
     class basic_ptree; 

     typedef basic_ptree<std::string, std::string, std::less<std::string> > ptree; 
    } 
} 

class JsonReader { 

public: 
    JsonReader(); 

    ~JsonReader() { }; 

    void processValuation(std::vector<Simulation> &simulations); 

private: 

    std::string processOptionParams(const ptree::value_type &node); 

    void loadConfig(std::string filename); 

    std::shared_ptr<boost::property_tree::ptree> jsonTree_; 
}; 

Tout va bien, mais je ne suis pas sûr de savoir comment transmettre la déclaration ptree::value_type. Des idées comment cela peut-il être fait?

Le fichier avec value_type définition que vous pouvez trouver ici http://www.boost.org/doc/libs/1_60_0/boost/property_tree/ptree.hpp

+1

Y a-t-il une raison particulière pour laquelle vous voudriez le déclarer? –

Répondre

2

Vous ne pouvez pas déclarer avant un membre de type hors d'un type déclaré avant. Cela vous laisse soit en tirant simplement la définition réelle de value_type de ptree (non recommandé), ou simplement en incluant l'en-tête complet ptree.hpp.

Une fois que vous avez besoin des composants internes d'une classe dans votre fichier d'en-tête, la déclaration de transfert n'est pas une option.

+0

ok, merci, je me rends compte que nous ne pouvons pas annoncer le membre «normal» de la classe, mais je pensais que c'est peut-être différent avec typedef. En tout cas, merci beaucoup! – JosephConrad