Boost::cregexp_iterator复杂性错误

boost::cregexp_iterator compliation errors

本文关键字:复杂性 错误 iterator cregexp Boost      更新时间:2023-10-16

我正在尝试使用boost::cregexp_iterator,如http://www.boost.org/doc/libs/1_55_0/libs/regex/doc/html/boost_regex/ref/regex_iterator.html

所示
// Loop through all the patterns
auto sessionReconstructionsEnd = _sessionReconstructions.end();
for (auto sr = _sessionReconstructions.begin(); sr != sessionReconstructionsEnd; ++sr) {
    const std::string& pattern = sr->first;
    const auto& editors = sr->second;
    regex re(pattern);
        ...
    for (auto session = sessions.begin(); session != sessionsEnd; ++session) {

        for (size_t chunkNumber = 0; chunkNumber < sessionChunks.size(); ++chunkNumber) {
            const auto& chunkData = sessionChunks[chunkNumber].data;

            cregex_iterator reIteratorEnd;
            cregex_iterator reIterator(
                reinterpret_cast<const char*>(chunkData.data()),
                reinterpret_cast<const char*>(chunkData.data()) + chunkData.size(),
                re); // Here the search is being done...

所有其他代码被注释掉。我得到以下错误:

               ^
In file included from /usr/include/boost/regex/v4/regex.hpp:67:0,
                 from /usr/include/boost/regex.hpp:31,
                 from LGEJobConfiguration.cpp:4:
/usr/include/boost/regex/v4/basic_regex.hpp: In instantiation of ‘boost::basic_regex<charT, traits>::basic_regex(const boost::basic_regex<charT, traits>&) [with charT = char; traits = boost::regex_traits<char>]’:
/usr/include/boost/regex/v4/regex_iterator.hpp:52:43:   required from ‘boost::regex_iterator_implementation<BidirectionalIterator, charT, traits>::regex_iterator_implementation(const regex_type*, BidirectionalIterator, boost::regex_constants::match_flag_type) [with BidirectionalIterator = const char*; charT = char; traits = boost::regex_traits<char>; boost::regex_iterator_implementation<BidirectionalIterator, charT, traits>::regex_type = boost::basic_regex<char, boost::regex_traits<char> >; boost::regex_constants::match_flag_type = boost::regex_constants::_match_flags]’
/usr/include/boost/regex/v4/regex_iterator.hpp:113:46:   required from ‘boost::regex_iterator<BidirectionalIterator, charT, traits>::regex_iterator(BidirectionalIterator, BidirectionalIterator, const regex_type&, boost::regex_constants::match_flag_type) [with BidirectionalIterator = const char*; charT = char; traits = boost::regex_traits<char>; boost::regex_iterator<BidirectionalIterator, charT, traits>::regex_type = boost::basic_regex<char, boost::regex_traits<char> >; boost::regex_constants::match_flag_type = boost::regex_constants::_match_flags]’
LGEJobConfiguration.cpp:543:8:   required from here
/usr/include/boost/regex/v4/basic_regex.hpp:344:29: error: use of deleted function ‘boost::shared_ptr<boost::re_detail::basic_regex_implementation<char, boost::regex_traits<char> > >::shared_ptr(const boost::shared_ptr<boost::re_detail::basic_regex_implementation<char, boost::regex_traits<char> > >&)’
       : m_pimpl(that.m_pimpl) {}
                             ^
In file included from /usr/include/boost/shared_ptr.hpp:17:0,
                 from /usr/include/boost/regex/v4/regex_workaround.hpp:43,
                 from /usr/include/boost/regex/v4/regex.hpp:32,
                 from /usr/include/boost/regex.hpp:31,
                 from LGEJobConfiguration.cpp:4:
/usr/include/boost/smart_ptr/shared_ptr.hpp:168:25: note: ‘boost::shared_ptr<boost::re_detail::basic_regex_implementation<char, boost::regex_traits<char> > >::shared_ptr(const boost::shared_ptr<boost::re_detail::basic_regex_implementation<char, boost::regex_traits<char> > >&)’ is implicitly declared as deleted because ‘boost::shared_ptr<boost::re_detail::basic_regex_implementation<char, boost::regex_traits<char> > >’ declares a move constructor or move assignment operator
 template<class T> class shared_ptr
                         ^
/usr/include/boost/smart_ptr/shared_ptr.hpp: In instantiation of ‘boost::shared_ptr<T>& boost::shared_ptr<T>::operator=(const boost::shared_ptr<T>&) [with T = boost::re_detail::named_subexpressions]’:
/usr/include/boost/regex/v4/match_results.hpp:549:20:   required from ‘void boost::match_results<BidiIterator, Allocator>::set_named_subs(boost::shared_ptr<boost::re_detail::named_subexpressions>) [with BidiIterator = const char*; Allocator = std::allocator<boost::sub_match<const char*> >]’
/usr/include/boost/regex/v4/perl_matcher_common.hpp:265:7:   required from ‘bool boost::re_detail::perl_matcher<BidiIterator, Allocator, traits>::find_imp() [with BidiIterator = const char*; Allocator = std::allocator<boost::sub_match<const char*> >; traits = boost::regex_traits<char>]’
/usr/include/boost/regex/v4/perl_matcher_common.hpp:230:20:   required from ‘bool boost::re_detail::perl_matcher<BidiIterator, Allocator, traits>::find() [with BidiIterator = const char*; Allocator = std::allocator<boost::sub_match<const char*> >; traits = boost::regex_traits<char>]’
/usr/include/boost/regex/v4/regex_search.hpp:56:24:   required from ‘bool boost::regex_search(BidiIterator, BidiIterator, boost::match_results<Iterator, Allocator>&, const boost::basic_regex<charT, traits>&, boost::regex_constants::match_flag_type, BidiIterator) [with BidiIterator = const char*; Allocator = std::allocator<boost::sub_match<const char*> >; charT = char; traits = boost::regex_traits<char>; boost::regex_constants::match_flag_type = boost::regex_constants::_match_flags]’
/usr/include/boost/smart_ptr/shared_ptr.hpp:168:25: note: ‘boost::shared_ptr<boost::re_detail::named_subexpressions>::shared_ptr(const boost::shared_ptr<boost::re_detail::named_subexpressions>&)’ is implicitly declared as deleted because ‘boost::shared_ptr<boost::re_detail::named_subexpressions>’ declares a move constructor or move assignment operator
 template<class T> class shared_ptr
                         ^
In file included from /usr/include/boost/regex/v4/regex.hpp:82:0,
                 from /usr/include/boost/regex.hpp:31,
                 from LGEJobConfiguration.cpp:4:
/usr/include/boost/regex/v4/match_results.hpp: In instantiation of ‘boost::match_results<BidiIterator, Allocator>::match_results(const boost::match_results<BidiIterator, Allocator>&) [with BidiIterator = const char*; Allocator = std::allocator<boost::sub_match<const char*> >]’:
/usr/include/boost/regex/v4/perl_matcher_non_recursive.hpp:134:76:   required from ‘boost::re_detail::saved_recursion<Results>::saved_recursion(int, const boost::re_detail::re_syntax_base*, Results*) [with Results = boost::match_results<const char*>]’
/usr/include/boost/regex/v4/perl_matcher_non_recursive.hpp:342:4:   required from ‘void boost::re_detail::perl_matcher<BidiIterator, Allocator, traits>::push_recursion(int, const boost::re_detail::re_syntax_base*, boost::re_detail::perl_matcher<BidiIterator, Allocator, traits>::results_type*) [with BidiIterator = const char*; Allocator = std::allocator<boost::sub_match<const char*> >; traits = boost::regex_traits<char>; boost::re_detail::perl_matcher<BidiIterator, Allocator, traits>::results_type = boost::match_results<const char*>]’
/usr/include/boost/regex/v4/perl_matcher_non_recursive.hpp:935:127:   required from ‘bool boost::re_detail::perl_matcher<BidiIterator, Allocator, traits>::match_endmark() [with BidiIterator = const char*; Allocator = std::allocator<boost::sub_match<const char*> >; traits = boost::regex_traits<char>]’
/usr/include/boost/regex/v4/perl_matcher_non_recursive.hpp:147:7:   required from ‘bool boost::re_detail::perl_matcher<BidiIterator, Allocator, traits>::match_all_states() [with BidiIterator = const char*; Allocator = std::allocator<boost::sub_match<const char*> >; traits = boost::regex_traits<char>]’
/usr/include/boost/regex/v4/perl_matcher_common.hpp:323:21:   [ skipping 2 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/usr/include/boost/regex/v4/perl_matcher_common.hpp:230:20:   required from ‘bool boost::re_detail::perl_matcher<BidiIterator, Allocator, traits>::find() [with BidiIterator = const char*; Allocator = std::allocator<boost::sub_match<const char*> >; traits = boost::regex_traits<char>]’
/usr/include/boost/regex/v4/regex_search.hpp:56:24:   required from ‘bool boost::regex_search(BidiIterator, BidiIterator, boost::match_results<Iterator, Allocator>&, const boost::basic_regex<charT, traits>&, boost::regex_constants::match_flag_type, BidiIterator) [with BidiIterator = const char*; Allocator = std::allocator<boost::sub_match<const char*> >; charT = char; traits = boost::regex_traits<char>; boost::regex_constants::match_flag_type = boost::regex_constants::_match_flags]’
/usr/include/boost/regex/v4/regex_search.hpp:42:55:   required from ‘bool boost::regex_search(BidiIterator, BidiIterator, boost::match_results<Iterator, Allocator>&, const boost::basic_regex<charT, traits>&, boost::regex_constants::match_flag_type) [with BidiIterator = const char*; Allocator = std::allocator<boost::sub_match<const char*> >; charT = char; traits = boost::regex_traits<char>; boost::regex_constants::match_flag_type = boost::regex_constants::_match_flags]’
/usr/include/boost/regex/v4/regex_iterator.hpp:56:54:   required from ‘bool boost::regex_iterator_implementation<BidirectionalIterator, charT, traits>::init(BidirectionalIterator) [with BidirectionalIterator = const char*; charT = char; traits = boost::regex_traits<char>]’
/usr/include/boost/regex/v4/regex_iterator.hpp:115:10:   required from ‘boost::regex_iterator<BidirectionalIterator, charT, traits>::regex_iterator(BidirectionalIterator, BidirectionalIterator, const regex_type&, boost::regex_constants::match_flag_type) [with BidirectionalIterator = const char*; charT = char; traits = boost::regex_traits<char>; boost::regex_iterator<BidirectionalIterator, charT, traits>::regex_type = boost::basic_regex<char, boost::regex_traits<char> >; boost::regex_constants::match_flag_type = boost::regex_constants::_match_flags]’
LGEJobConfiguration.cpp:543:8:   required from here
/usr/include/boost/regex/v4/match_results.hpp:81:130: error: use of deleted function ‘boost::shared_ptr<boost::re_detail::named_subexpressions>::shared_ptr(const boost::shared_ptr<boost::re_detail::named_subexpressions>&)’
       : m_subs(m.m_subs), m_named_subs(m.m_named_subs), m_last_closed_paren(m.m_last_closed_paren), m_is_singular(m.m_is_singular) 

怎么了?

UPDATE:问题是与标志——std=c++11 -我发布另一个帖子这个问题。UPDATE2:问题是我使用的是旧版本的boost(1.4.3),移动到最新解决它

让我为你做你的工作告诉你我如何分析这个问题:

#include <boost/regex.hpp>
#include <boost/cregex.hpp>
#include <vector>
int main()
{
    using namespace boost;
    regex re(".*");
    const std::vector<char> chunkData;
    cregex_iterator reIteratorEnd;
    cregex_iterator reIterator(
            reinterpret_cast<const char*>(chunkData.data()),
            reinterpret_cast<const char*>(chunkData.data()) + chunkData.size(),
            re); // Here the search is being done...}
}

对我来说编译得很好。你的问题中没有任何else是我们可以复制的

你可以从那里接手。看看它什么时候开始失败。90%的时候,失败的原因就很明显了。否则,带着更清晰、更好的问题回来。

PS。

  1. 我知道这在技术上不是一个答案。尽管如此,我认为它还是有帮助的(而且它不太适合在评论中)
  2. 你当然不需要在我的SSCCE中重新解释演员。我假设你的chunkData可能(谁知道)实际上是std::deque<unsigned char>或类似的?在这种情况下,看看是否应该使用static_cast:什么时候应该使用static_cast、dynamic_cast、const_cast和reinterpret_cast ?和常规类型转换与静态类型转换与动态类型转换