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>
yup जो एक गंभीर faq है, हालांकि निष्पक्षता में यह [थॉमस हेलर द्वारा एक टिप्पणी] है (http://boost-spirit.com/home/articles/qi-example/parsing-a-list-of-key -अनु-जोड़े-उपयोग-भावना-qi/टिप्पणी-पृष्ठ -1/# टिप्पणी -160) उस लेख पर :) – sehe
@sehe: मैंने पाया कि पेजों और भारी पढ़ने के पृष्ठों के बाद छोटी रेखा और कई प्रयास (आंशिक रूप से सफल, लेकिन आम तौर पर निराशाजनक) मेरे अतिरिक्त छोटे परीक्षण मामले को क्राफ्ट करने का। मैं विश्वास नहीं कर सकता कि ** शामिल ** मेरी समस्या का समाधान कर सकता है। मुझे क्या दुख होता है, यह है कि दस्तावेज़ों ने हार्टमूट कैसर द्वारा स्पष्ट रूप से चित्रित सादगी को छुपाया है ... – CapelliC
@chac हाँ, यह शर्म की बात है कि पृष्ठ समुदाय बनाए रखा गया है, या मैं व्यक्तिगत रूप से वहां # शामिल हूं। – sehe