boost :: filesystem中的错误,这可能吗?

时间:2012-02-25 21:11:59

标签: c++ boost

当我尝试编译此代码时:

#include <boost/filesystem/path.hpp>
#include <boost/filesystem/fstream.hpp>

using namespace std;

int main()
{
    boost::filesystem3::path file_path("C:\\Users\\Art\\Desktop\\ASO.sln");
    boost::filesystem3::path new_path(file_path.begin(),file_path.end() - 1);
    return 0;
} 

我收到了一个错误:

C:\Users\Me\boost_path\..\..\..\boost_148\include\boost-1_48\boost\filesystem\v3\path.hpp:163: error: no matching function for call to 'convert(const boost::filesystem3::path*, const boost::filesystem3::path*, boost::filesystem3::path::string_type&, const codecvt_type&)'

为什么呢?我假设boost::filesystem中存在错误。

2 个答案:

答案 0 :(得分:2)

您的第二行代码有一个-1,其中不需要。以下是您正在致电的代码。

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());
      }
    }

答案 1 :(得分:1)

begin()的{​​{1}}和end()迭代器是不是字符迭代器。它们是目录迭代器;它们遍历路径中的目录。这些迭代器的boost::filesystem::path本身是value_type,它们包含目录。

所以你不能从另一个path的迭代器中构造path