Boost multi_array - nie kompiluje się

0

Pisząc projekt chciałem użyć multi_array z boosta. Początkowo działało dobrze, problem pojawił się przy próbie zmiany rozmiaru tablicy. Początkowo męczyłem się ze swoim kodem, ale w pewnym momencie nie miałem już pomysłów, skopiowałem kod prosto z dokumentacji i... nie kompiluje się. Nie mam pojęcia o co może chodzić. Kod bezpośrednio z dokumentacji:

#include "boost/multi_array.hpp"

int main () {
  typedef boost::multi_array<int, 3> array_type;

  array_type::extent_gen extents;
  array_type A(extents[3][3][3]);
  A[0][0][0] = 4;
  A[2][2][2] = 5;
  A.resize(extents[2][3][4]);
  assert(A[0][0][0] == 4);

} 

Kompilowane w VS2010. Błędy z których ja nie potrafię wyczytać o co chodzi:

 1>e:\microsoft visual studio 10.0\vc\include\xutility(2216): error C2665: 'std::_Copy_impl' : none of the 2 overloads could convert all the argument types
1>          e:\microsoft visual studio 10.0\vc\include\xutility(2182): could be '_OutIt std::_Copy_impl<_InIt,_OutIt>(_InIt,_InIt,_OutIt,std::input_iterator_tag,std::output_iterator_tag)'
1>          with
1>          [
1>              _OutIt=boost::detail::multi_array::array_iterator<int,int *,boost::mpl::size_t<3>,boost::detail::multi_array::sub_array<int,2>>,
1>              _InIt=boost::detail::multi_array::array_iterator<int,const int *,boost::mpl::size_t<3>,boost::detail::multi_array::const_sub_array<int,2>>
1>          ]
1>          e:\microsoft visual studio 10.0\vc\include\xutility(2191): or       '_OutIt std::_Copy_impl<_InIt,_OutIt>(_InIt,_InIt,_OutIt,std::random_access_iterator_tag,std::random_access_iterator_tag)'
1>          with
1>          [
1>              _OutIt=boost::detail::multi_array::array_iterator<int,int *,boost::mpl::size_t<3>,boost::detail::multi_array::sub_array<int,2>>,
1>              _InIt=boost::detail::multi_array::array_iterator<int,const int *,boost::mpl::size_t<3>,boost::detail::multi_array::const_sub_array<int,2>>
1>          ]
1>          while trying to match the argument list '(boost::detail::multi_array::array_iterator<T,TPtr,NumDims,Reference>, boost::detail::multi_array::array_iterator<T,TPtr,NumDims,Reference>, boost::detail::multi_array::array_iterator<T,TPtr,NumDims,Reference>, boost::detail::iterator_category_with_traversal<Category,Traversal>, boost::detail::iterator_category_with_traversal<Category,Traversal>)'
1>          with
1>          [
1>              T=int,
1>              TPtr=const int *,
1>              NumDims=boost::mpl::size_t<3>,
1>              Reference=boost::detail::multi_array::const_sub_array<int,2>
1>          ]
1>          and
1>          [
1>              T=int,
1>              TPtr=const int *,
1>              NumDims=boost::mpl::size_t<3>,
1>              Reference=boost::detail::multi_array::const_sub_array<int,2>
1>          ]
1>          and
1>          [
1>              T=int,
1>              TPtr=int *,
1>              NumDims=boost::mpl::size_t<3>,
1>              Reference=boost::detail::multi_array::sub_array<int,2>
1>          ]
1>          and
1>          [
1>              Category=std::input_iterator_tag,
1>              Traversal=boost::random_access_traversal_tag
1>          ]
1>          and
1>          [
1>              Category=std::input_iterator_tag,
1>              Traversal=boost::random_access_traversal_tag
1>          ]
1>          e:\microsoft visual studio 10.0\vc\include\xutility(2227) : see reference to function template instantiation '_OutIt std::_Copy_impl<_Iter,_OutIt>(_InIt,_InIt,_OutIt,std::tr1::false_type)' being compiled
1>          with
1>          [
1>              _OutIt=boost::detail::multi_array::array_iterator<int,int *,boost::mpl::size_t<3>,boost::detail::multi_array::sub_array<int,2>>,
1>              _Iter=boost::detail::multi_array::array_iterator<int,const int *,boost::mpl::size_t<3>,boost::detail::multi_array::const_sub_array<int,2>>,
1>              _InIt=boost::detail::multi_array::array_iterator<int,const int *,boost::mpl::size_t<3>,boost::detail::multi_array::const_sub_array<int,2>>
1>          ]
1>          c:\program files\boost\boost_1_48_0\boost_1_48_0\boost\multi_array\view.hpp(321) : see reference to function template instantiation '_OutIt std::copy<boost::detail::multi_array::array_iterator<T,TPtr,NumDims,Reference>,boost::detail::multi_array::array_iterator<T,T *,NumDims,boost::detail::multi_array::sub_array<T,2>>>(_InIt,_InIt,_OutIt)' being compiled
1>          with
1>          [
1>              _OutIt=boost::detail::multi_array::array_iterator<int,int *,boost::mpl::size_t<3>,boost::detail::multi_array::sub_array<int,2>>,
1>              T=int,
1>              TPtr=const int *,
1>              NumDims=boost::mpl::size_t<3>,
1>              Reference=boost::detail::multi_array::const_sub_array<int,2>,
1>              _InIt=boost::detail::multi_array::array_iterator<int,const int *,boost::mpl::size_t<3>,boost::detail::multi_array::const_sub_array<int,2>>
1>          ]
1>          c:\program files\boost\boost_1_48_0\boost_1_48_0\boost\multi_array\view.hpp(313) : while compiling class template member function 'boost::detail::multi_array::multi_array_view<T,NumDims> &boost::detail::multi_array::multi_array_view<T,NumDims>::operator =(const boost::detail::multi_array::multi_array_view<T,NumDims> &)'
1>          with
1>          [
1>              T=int,
1>              NumDims=3
1>          ]
1>          c:\users\trocha\documents\visual studio 2010\projects\multi_array\multi_array\multi.cpp(7) : see reference to class template instantiation 'boost::detail::multi_array::multi_array_view<T,NumDims>' being compiled
1>          with
1>          [
1>              T=int,
1>              NumDims=3
1>          ]
1>
1>Build FAILED.
1>
0

Dziwne... U mnie dla VC++ 2010 i Boost 1.47 kompiluje się bez problemu.

0

Ja początkowo próbowałem na wersji 1.44, ale spojrzałem do zmian w wersjach i widziałem, że coś było zmieniane w 1.45 (chyba) więc ściągnąłem 1.48, ale cały czas to samo...

1 użytkowników online, w tym zalogowanych: 0, gości: 1