gpt4 book ai didi

c++ - boost::multi_array 调整大小不起作用

转载 作者:IT老高 更新时间:2023-10-28 22:21:31 50 4
gpt4 key购买 nike

我无法调整 boost::multi_array 的大小。当我尝试它时,它会给出关于 std::_Copy_impl 等的错误。这是代码

#include <boost/multi_array.hpp>

typedef boost::multi_array<int, 2> array_type;

class arrayclass{
public:
arrayclass(array_type::extent_gen extents)
: multiarray(extents[3][4]){
}
array_type multiarray;
};

int main(){
array_type::extent_gen extents;
arrayclass arraytest(extents);
arraytest.multiarray.resize(extents[5][6]);
return 0;
}

编辑:这是错误

1>------ Build started: Project: multiarray, Configuration: Debug Win32 ------
1> main.cpp
1>c:\program files (x86)\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> c:\program files (x86)\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<2>,boost::detail::multi_array::sub_array<int,1>>,
1> _InIt=boost::detail::multi_array::array_iterator<int,const int *,boost::mpl::size_t<2>,boost::detail::multi_array::const_sub_array<int,1>>
1> ]
1> c:\program files (x86)\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<2>,boost::detail::multi_array::sub_array<int,1>>,
1> _InIt=boost::detail::multi_array::array_iterator<int,const int *,boost::mpl::size_t<2>,boost::detail::multi_array::const_sub_array<int,1>>
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<2>,
1> Reference=boost::detail::multi_array::const_sub_array<int,1>
1> ]
1> and
1> [
1> T=int,
1> TPtr=const int *,
1> NumDims=boost::mpl::size_t<2>,
1> Reference=boost::detail::multi_array::const_sub_array<int,1>
1> ]
1> and
1> [
1> T=int,
1> TPtr=int *,
1> NumDims=boost::mpl::size_t<2>,
1> Reference=boost::detail::multi_array::sub_array<int,1>
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> c:\program files (x86)\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<2>,boost::detail::multi_array::sub_array<int,1>>,
1> _Iter=boost::detail::multi_array::array_iterator<int,const int *,boost::mpl::size_t<2>,boost::detail::multi_array::const_sub_array<int,1>>,
1> _InIt=boost::detail::multi_array::array_iterator<int,const int *,boost::mpl::size_t<2>,boost::detail::multi_array::const_sub_array<int,1>>
1> ]
1> c:\boost_1_45_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,1>>>(_InIt,_InIt,_OutIt)' being compiled
1> with
1> [
1> _OutIt=boost::detail::multi_array::array_iterator<int,int *,boost::mpl::size_t<2>,boost::detail::multi_array::sub_array<int,1>>,
1> T=int,
1> TPtr=const int *,
1> NumDims=boost::mpl::size_t<2>,
1> Reference=boost::detail::multi_array::const_sub_array<int,1>,
1> _InIt=boost::detail::multi_array::array_iterator<int,const int *,boost::mpl::size_t<2>,boost::detail::multi_array::const_sub_array<int,1>>
1> ]
1> c:\boost_1_45_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=2
1> ]
1> c:\badprogramer\multiarray\multiarray\main.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=2
1> ]
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

最佳答案

这可以通过 VS10(使用正确的 VS10 header )+ boost 1.44 和调试配置(也根据旧版本的 boost 中的文档)重现。

简短的解决方法(until next c++ SP)是

#define _ITERATOR_DEBUG_LEVEL 0

在其他一切之前(特别是在 STL 包括之前)。

还有更复杂的可能解决方案 - 参见 this类似的线程。

干杯

关于c++ - boost::multi_array 调整大小不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4870172/

50 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com