无法使用boost :: filesystem创建路径

时间:2012-02-23 17:32:07

标签: c++ boost

我正在尝试创建另一条路径:

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). 

我自己没有定义任何宏。

1 个答案:

答案 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);