我正在尝试创建另一条路径:
path;//this is somewhere else correctly created path from a string
但是当我尝试这个时:
boost::filesystem3::path project_path(path.begin(),path.end());
我收到了一个错误:
error: no matching function for call to 'convert(const
boost::filesystem3::path*, const boost::filesystem3::path*,
boost::filesystem3::path::string_type&, const codecvt_type&)'
任何人都知道发生了什么事?
编辑
auto beg_ = path.begin();
auto end_ = path.end() - 1;//this line causes no advance defined error.
// If I try to do:
boost::filesystem3::path some_path(path.begin(),path.end() - 1); I'm getting the before mentioned (original error).
我自己没有定义任何宏。
答案 0 :(得分:2)
听起来path
的类型为boost::filesystem3::path
,而不是std::string
。 Boost被调用的构造函数可能是
template <class InputIterator>
path(InputIterator begin, InputIterator end)
{
if (begin != end)
{
std::basic_string<typename std::iterator_traits<InputIterator>::value_type>
s(begin, end);
path_traits::convert(s.c_str(), s.c_str()+s.size(), m_pathname, codecvt());
}
}
如果我没弄错的话,InputIterator
被解释为boost::filesystem3::path*
。如果是这种情况,那么是的,对path_traits::convert(s.c_str(), s.c_str()+s.size(), m_pathname, codecvt())
的调用可能与path_traits::convert()
的任何现有方法签名不匹配
查看使用std::string
代替path
变量是否有效 - 就像这样
std::string somePath = "/some/path";
boost::filesystem3::path project_path(somePath.begin(), somePath.end());
虽然如果你打算那样做,那就更容易做到
boost::filesystem3::path(somePath);