gpt4 book ai didi

c++ - 似乎无法在 Boost 库中使用此功能

转载 作者:行者123 更新时间:2023-11-28 02:36:16 25 4
gpt4 key购买 nike

我正在开发一个使用 Boost 正则表达式库的程序,我遇到了一个问题,在尝试调用 boost::regex_match() 函数时,我遇到了一个奇怪的错误,我'从来没有遇到过。这是相关代码。

boost::regex pattern("REGEX REDACTED");
boost::cmatch what;

XERCES_STD_QUALIFIER cout << "Enter XML Document-Building Commands" << XERCES_STD_QUALIFIER endl;
while(true) {
// Take the input from the user.
std::string input;
XERCES_STD_QUALIFIER cout << ">> ";
XERCES_STD_QUALIFIER getline(in, input);

if(boost::regex_match(input, what, pattern)) {
// whatever
}
}

这几乎正是我从我的讲师为此作业提供的类似程序中提取的示例代码。但是当我尝试编译时,我得到了这个错误。如果有帮助,我正在使用 NetBeans 8。

XMLDoc.cpp: In member function ‘void XMLDoc::createDoc(std::istream&)’:
XMLDoc.cpp:164:51: error: no matching function for call to ‘regex_match(std::string&, boost::cmatch&, boost::regex&)’
XMLDoc.cpp:164:51: note: candidates are:
In file included from /usr/include/boost/regex/v4/regex.hpp:145:0,
from /usr/include/boost/regex.hpp:31,
from XMLDoc.cpp:13:
/usr/include/boost/regex/v4/regex_match.hpp:44:6: note: template<class BidiIterator, class Allocator, class charT, class traits> bool boost::regex_match(BidiIterator, BidiIterator, boost::match_results<Iterator, Allocator>&, const boost::basic_regex<charT, traits>&, boost::regex_constants::match_flag_type)
/usr/include/boost/regex/v4/regex_match.hpp:44:6: note: template argument deduction/substitution failed:
XMLDoc.cpp:164:51: note: deduced conflicting types for parameter ‘BidiIterator’ (‘std::basic_string<char>’ and ‘boost::match_results<const char*>’)
In file included from /usr/include/boost/regex/v4/regex.hpp:145:0,
from /usr/include/boost/regex.hpp:31,
from XMLDoc.cpp:13:
/usr/include/boost/regex/v4/regex_match.hpp:53:6: note: template<class iterator, class charT, class traits> bool boost::regex_match(iterator, iterator, const boost::basic_regex<charT, traits>&, boost::regex_constants::match_flag_type)
/usr/include/boost/regex/v4/regex_match.hpp:53:6: note: template argument deduction/substitution failed:
XMLDoc.cpp:164:51: note: deduced conflicting types for parameter ‘iterator’ (‘std::basic_string<char>’ and ‘boost::match_results<const char*>’)
In file included from /usr/include/boost/regex/v4/regex.hpp:145:0,
from /usr/include/boost/regex.hpp:31,
from XMLDoc.cpp:13:
/usr/include/boost/regex/v4/regex_match.hpp:68:13: note: template<class charT, class Allocator, class traits> bool boost::regex_match(const charT*, boost::match_results<const charT*, Allocator>&, const boost::basic_regex<charT, traits2>&, boost::regex_constants::match_flag_type)
/usr/include/boost/regex/v4/regex_match.hpp:68:13: note: template argument deduction/substitution failed:
XMLDoc.cpp:164:51: note: mismatched types ‘const charT*’ and ‘std::basic_string<char>’
In file included from /usr/include/boost/regex/v4/regex.hpp:145:0,
from /usr/include/boost/regex.hpp:31,
from XMLDoc.cpp:13:
/usr/include/boost/regex/v4/regex_match.hpp:77:13: note: bool boost::regex_match(const std::basic_string<charT, ST, SA>&, boost::match_results<typename std::basic_string<charT, ST, SA>::const_iterator, Allocator>&, const boost::basic_regex<charT, traits>&, boost::regex_constants::match_flag_type) [with ST = std::char_traits<char>; SA = std::allocator<char>; Allocator = std::allocator<boost::sub_match<const char*> >; charT = char; traits = boost::regex_traits<char>; typename std::basic_string<charT, ST, SA>::const_iterator = __gnu_cxx::__normal_iterator<const char*, std::basic_string<char> >; boost::regex_constants::match_flag_type = boost::regex_constants::_match_flags]
/usr/include/boost/regex/v4/regex_match.hpp:77:13: note: no known conversion for argument 2 from ‘boost::cmatch {aka boost::match_results<const char*>}’ to ‘boost::match_results<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char> >, std::allocator<boost::sub_match<const char*> > >&’
/usr/include/boost/regex/v4/regex_match.hpp:85:13: note: template<class charT, class traits> bool boost::regex_match(const charT*, const boost::basic_regex<charT, traits>&, boost::regex_constants::match_flag_type)
/usr/include/boost/regex/v4/regex_match.hpp:85:13: note: template argument deduction/substitution failed:
XMLDoc.cpp:164:51: note: mismatched types ‘const charT*’ and ‘std::basic_string<char>’
In file included from /usr/include/boost/regex/v4/regex.hpp:145:0,
from /usr/include/boost/regex.hpp:31,
from XMLDoc.cpp:13:
/usr/include/boost/regex/v4/regex_match.hpp:94:13: note: template<class ST, class SA, class charT, class traits> bool boost::regex_match(const std::basic_string<charT, ST, SA>&, const boost::basic_regex<charT, traits>&, boost::regex_constants::match_flag_type)
/usr/include/boost/regex/v4/regex_match.hpp:94:13: note: template argument deduction/substitution failed:
XMLDoc.cpp:164:51: note: ‘boost::cmatch {aka boost::match_results<const char*>}’ is not derived from ‘const boost::basic_regex<charT, traits>’

有人可以帮我吗?我确信我正确地包含了这个库,因为我有另一个项目具有完全相同的链接器属性,该项目使用 boost::regex_match 函数(减去 cmatch 对象参数),并且它工作得很好。

最佳答案

如果您要使用 std::string 输入,则必须使用 boost::smatch 而不是 boost::cmatch。参见 http://www.boost.org/doc/libs/1_57_0/libs/regex/doc/html/boost_regex/ref/match_results.html .所以你需要做的就是改变

boost::cmatch what;

boost::smatch what;

关于c++ - 似乎无法在 Boost 库中使用此功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27328325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com