2012-02-20 9 views
5

this अन्य स्वीकृत उत्तर this नमूना के लिए स्वीकार्य उत्तर, लेकिन इसे संकलित करने में एक लंबी त्रुटि सूची दी गई है।आत्मा नमूना संकलित करने में त्रुटि

#include <boost/spirit/include/qi.hpp> 
#include <vector> 
#include <map> 
#include <string> 
#include <iostream> 

namespace qi = boost::spirit::qi; 

template <typename Iterator> 
struct keys_and_values 
    : qi::grammar<Iterator, std::map<std::string, std::string>()> 
{ 
    keys_and_values() 
     : keys_and_values::base_type(query) 
    { 
     query = pair >> *((qi::lit(';') | '&') >> pair); 
     pair = key >> -('=' >> value); 
     key = qi::char_("a-zA-Z_") >> *qi::char_("a-zA-Z_0-9"); 
     value = +qi::char_("a-zA-Z_0-9"); 
    } 
    qi::rule<Iterator, std::map<std::string, std::string>()> query; 
    qi::rule<Iterator, std::pair<std::string, std::string>()> pair; 
    qi::rule<Iterator, std::string()> key, value; 
}; 

int main(int argc, char **argv) 
{ 
    std::string input("key1=value1;key2;key3=value3"); // input to parse 
    std::string::iterator begin = input.begin(); 
    std::string::iterator end = input.end(); 

    keys_and_values<std::string::iterator> p; // create instance of parser 
    std::map<std::string, std::string> m;  // map to receive results 
    bool result = qi::parse(begin, end, p, m); // returns true if successful 
} 

मैं कोशिश की है दोनों (मेरी उबंटू 11.04 distro पर डिफ़ॉल्ट) को बढ़ावा देने के 1.42, और 1.48 (डाउनलोड): यहाँ नमूना कोड, मैं सिर्फ भी शामिल है और एक डमी मुख्य() जोड़ा गया। त्रुटियां (मैं QtCreator द्वारा फ़िल्टर किए गए लोगों की रिपोर्ट करता हूं) भिन्न: ver 1.42

/usr/include/boost/fusion/support/tag_of.hpp:92:13: error: no matching function for call to ‘assertion_failed(mpl_::failed************ boost::mpl::not_<boost::fusion::detail::is_specialized<std::pair<std::basic_string<char>, std::basic_string<char> > > >::************)’ 

/usr/include/boost/spirit/home/support/attributes.hpp:409: error: no matching function for call to ‘std::basic_string<char>::basic_string(std::pair<std::basic_string<char>, std::basic_string<char> >&)’ 

/usr/include/boost/spirit/home/support/attributes.hpp:409: error: no matching function for call to ‘std::basic_string<char>::basic_string(mpl_::void_&)’ 

ver। 1.48

/home/carlo/Projects/spirit_vect_literals-build-desktop/../../cpp/boost_1_48_0/boost/spirit/home/qi/detail/assign_to.hpp:123: error: no matching function for call to ‘std::pair<std::basic_string<char>, std::basic_string<char> >::pair(const std::basic_string<char>&)’ 

क्या मेरे पास कुछ याद आ रही है?

संपादित: मैं समाधान मिल गया है: इस शीर्ष लेख और दोनों संस्करणों इस पर नज़र रखने पर

#include <boost/fusion/adapted/std_pair.hpp> 

उत्तर

5

बधाई संकलन ... मैं एक ही त्रुटि वापस एक कुछ हफ्तों और साथ बर्बाद घंटे मारा यह।

#include <boost/fusion/adapted/std_pair.hpp> 

क्यूई एक नियम की उपज के तौर std :: जोड़ी का उपयोग करने के लिए जो आवश्यक जादू प्रदान करता है: आप पाया के रूप में, समाधान सिर्फ इस शामिल करने के लिए है।

मैं मुख्य रूप से इस उत्तर को छोड़ रहा हूं, इसलिए प्रश्न अब अनुत्तरित के रूप में दिखाई नहीं देता है - यदि आप अपना उत्तर जोड़ना/स्वीकार करना चाहते हैं तो मैं इसे वापस ले जाऊंगा।

+0

yup जो एक गंभीर faq है, हालांकि निष्पक्षता में यह [थॉमस हेलर द्वारा एक टिप्पणी] है (http://boost-spirit.com/home/articles/qi-example/parsing-a-list-of-key -अनु-जोड़े-उपयोग-भावना-qi/टिप्पणी-पृष्ठ -1/# टिप्पणी -160) उस लेख पर :) – sehe

+0

@sehe: मैंने पाया कि पेजों और भारी पढ़ने के पृष्ठों के बाद छोटी रेखा और कई प्रयास (आंशिक रूप से सफल, लेकिन आम तौर पर निराशाजनक) मेरे अतिरिक्त छोटे परीक्षण मामले को क्राफ्ट करने का। मैं विश्वास नहीं कर सकता कि ** शामिल ** मेरी समस्या का समाधान कर सकता है। मुझे क्या दुख होता है, यह है कि दस्तावेज़ों ने हार्टमूट कैसर द्वारा स्पष्ट रूप से चित्रित सादगी को छुपाया है ... – CapelliC

+0

@chac हाँ, यह शर्म की बात है कि पृष्ठ समुदाय बनाए रखा गया है, या मैं व्यक्तिगत रूप से वहां # शामिल हूं। – sehe

संबंधित मुद्दे