Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 分析器规则未正确地在向量中填充值_C++_Vector_Boost Spirit_Boost Spirit Qi - Fatal编程技术网

C++ 分析器规则未正确地在向量中填充值

C++ 分析器规则未正确地在向量中填充值,c++,vector,boost-spirit,boost-spirit-qi,C++,Vector,Boost Spirit,Boost Spirit Qi,这是我的密码 std::ifstream ifs("f:/test.txt"); std::string line; //In header in my code static std::vector<unsigned long long> v_BF_Char; static std::vector<unsigned long long> v_Begin_BF_Range; static std::multimap<uintmax_t, std::string&g

这是我的密码

std::ifstream ifs("f:/test.txt");
std::string line;

//In header in my code
static std::vector<unsigned long long> v_BF_Char;
static std::vector<unsigned long long> v_Begin_BF_Range;
static std::multimap<uintmax_t, std::string> m_BF_Char;

//qi::int_parser<uintmax_t, 16> hex_int;
static qi::uint_parser<unsigned long long, 16, 2, -1> hex_int; 

while (std::getline(ifs, line))
{
    typedef std::string::const_iterator It;
    It begin = line.begin(), end = line.end();

    // rule for grammer
   //  qi::rule<It, unsigned long long()> braced_hex = '<' >> hex_int >> '>';
    qi::rule<It, uintmax_t()> braced_hex2 = '<' >> hex_int >> '>';
    qi::rule<It, std::vector<unsigned long long>()> braced_hex = '<' >> qi::repeat(1,2)[hex_int] >> '>';
    qi::rule<It, std::vector<unsigned long long>()> braced_hex1 = '[' >> qi::repeat(1,2)[hex_int] >> ']';
    bool beginbfrange_check = qi::phrase_parse(begin, end, *braced_hex >> *braced_hex1 , qi::space, v_Begin_BF_Range);
}
它可以工作,但矢量只存储005d和00a6的值,而不存储其余的值 向量中的值应为005d 00a6 0063 007c 0064>007e


**问题在于其他QI规则**

为了记录在案,旧的答案在这里:请你为什么认真对待这个问题?这个问题看起来像我的问题,但我的问题所说的远不同于此。请运行它并自己检查它。我想用优化的方式来做。为什么你不想帮我?顺便说一句,我没有生气,我在问题中说得很清楚。为了记录在案,旧的答案是:请你为什么认真对待这个问题?这个问题看起来像我的问题,但我的问题说的远不一样。请运行它,自己检查它。我想用优化的方式来做。为什么你不想帮我?顺便说一句,我没有生气,我在问题中说得很清楚。为了记录在案,旧的答案是:请你为什么认真对待这个问题?这个问题看起来像我的问题,但我的问题说的远不一样。请运行它,自己检查它。我想用优化的方式来做。为什么你不想帮我?顺便说一句,我说得很清楚,我没有生气?
<005d> <00a6> [<0063> <007c> <0064> <007e>]
<51dc> <04001C0180000000000000000EE317BC>
<05001C0180000000> <04001C0180000000000000000EE317BC>
<51dc> <30ea30f330ae30c330c8>
<0000> <fffd>
<003d> <00a5>
<05001C0180000000> <04001C0180000000000000000EE317BC>
<005d> <00a6>
<005e> <007d>
<005f> <0303>
<0060> <2019>
qi::rule<It, uintmax_t()> braced_hex2 = '<' >> hex_int >> '>';
bool beginbfrange_check = qi::phrase_parse(begin, end, *braced_hex2 >> *('[' >> *braced_hex2 >> ']') , qi::space, v_Begin_BF_Range);
bool beginbfrange_check = qi::phrase_parse(begin, end, *braced_hex >> *braced_hex1 , qi::space, v_Begin_BF_Range);