当我尝试编译此代码时:
#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
中存在错误。
答案 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
。