2011-10-15 2 views
0

내가부스트 : : 파일 시스템 :: 경로 : (반복자를 통해) 추가 컴파일러 오류

c:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility(2885): warning C4996: 'std::_Mismatch1': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators' 
     c:\vc\include\xutility(2868) : see declaration of 'std::_Mismatch1' 
     g:\copywithpath\copywithpath.cpp(40) : see reference to function template instantiation 'std::pair<_Ty1,_Ty2> std::mismatch<boost::filesystem3::path::iterator,boost::filesystem3::path::iterator>(_InIt1,_InIt1,_InIt2)' being compiled 
     with 
     [ 
      _Ty1=boost::filesystem3::path::iterator, 
      _Ty2=boost::filesystem3::path::iterator, 
      _InIt1=boost::filesystem3::path::iterator, 
      _InIt2=boost::filesystem3::path::iterator 
     ] 
c:\vc\include\xstring(506): error C2621: member 'std::_String_val<_Elem,_Alloc>::_Bxty::_Buf' of union 'std::_String_val<_Elem,_Alloc>::_Bxty' has copy constructor 
     with 
     [ 
      _Elem=boost::filesystem3::path, 
      _Alloc=std::allocator<boost::filesystem3::path> 
     ] 
     c:\vc\include\xstring(509) : see reference to class template instantiation 'std::_String_val<_Elem,_Alloc>::_Bxty' being compiled 
     with 
     [ 
      _Elem=boost::filesystem3::path, 
      _Alloc=std::allocator<boost::filesystem3::path> 
     ] 
     c:\vc\include\xstring(522) : see reference to class template instantiation 'std::_String_val<_Elem,_Alloc>' being compiled 
     with 
     [ 
      _Elem=boost::filesystem3::path, 
      _Alloc=std::allocator<boost::filesystem3::path> 
     ] 
     f:\boost\filesystem\v3\path.hpp(621) : see reference to class template instantiation 'std::basic_string<_Elem>' being compiled 
     with 
     [ 
      _Elem=boost::filesystem3::path 
     ] 
     f:\boost\filesystem\v3\path.hpp(232) : see reference to function template instantiation 'boost::filesystem3::path &boost::filesystem3::path::append<InputIterator>(InputIterator,InputIterator,const boost::filesystem3::path::codecvt_type &)' being compiled 
     with 
     [ 
      InputIterator=boost::filesystem3::path::iterator 
     ] 
     g:\copywithpath\copywithpath.cpp(42) : see reference to function template instantiation 'boost::filesystem3::path &boost::filesystem3::path::append<_Ty2>(InputIterator,InputIterator)' being compiled 
     with 
     [ 
      _Ty2=boost::filesystem3::path::iterator, 
      InputIterator=boost::filesystem3::path::iterator 
     ] 
f:\boost\filesystem\v3\path.hpp(622): error C2665: 'boost::filesystem3::path_traits::convert' : none of the 8 overloads could convert all the argument types 
    f:\boost\filesystem\v3\path_traits.hpp(96): could be 'void boost::filesystem3::path_traits::convert(const char *,const char *,std::wstring &,const boost::filesystem3::path_traits::codecvt_type &)' 
    f:\boost\filesystem\v3\path_traits.hpp(102): or  'void boost::filesystem3::path_traits::convert(const wchar_t *,const wchar_t *,std::string &,const boost::filesystem3::path_traits::codecvt_type &)' 
    f:\boost\filesystem\v3\path_traits.hpp(130): or  'void boost::filesystem3::path_traits::convert(const char *,const char *,std::string &,const boost::filesystem3::path_traits::codecvt_type &)' 
    f:\boost\filesystem\v3\path_traits.hpp(150): or  'void boost::filesystem3::path_traits::convert(const wchar_t *,const wchar_t *,std::wstring &,const boost::filesystem3::path_traits::codecvt_type &)' 
    while trying to match the argument list '(const boost::filesystem3::path *, const boost::filesystem3::path *, boost::filesystem3::path::string_type, const boost::filesystem3::path::codecvt_type)' 
을 다음과 같이

#include <iostream> 
#include <string> 
#include <boost\filesystem.hpp> 

namespace bf = boost::filesystem; 

bf::path o("C:\\mir"); 
bf::path p("C:\\mir\\dir\\beer.txt"); 
bf::path r("C:\\test"); 

auto pp = std::mismatch(o.begin(), o.end(), p.begin()); 
r.append(pp.second, p.end()); // this line causes compiler error 

내가 컴파일러 오류가 다음과 같이 boost::filesystem를 사용하여 새 경로를 생성하기 위해 노력하고있어 원인

내 코드가 잘못되어 어떻게 해결할 수 있습니까? 미리 감사드립니다.

답변

2

path :: append는 일련의 문자를 예상하며 경로 범위를 제공했습니다. 그것은 자신의에 의해 각 요소를 추가해야합니다

auto pp = std::mismatch(o.begin(), o.end(), p.begin()); 
for(auto iter = pp.second; iter != p.end(); ++iter) 
    r /= *iter; 

불행하게도 부스트 : : 파일 시스템 경로는 경로를 arithmetics위한 인터페이스를 제공하지 않습니다.

관련 문제