提高:: multi_array的大小调整不起作用 [英] boost::multi_array resize doesn't work

查看:421
本文介绍了提高:: multi_array的大小调整不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不能得到的boost :: multi_array的大小调整工作。当我尝试它,它提供了有关的std :: _ Copy_impl之类的错误。这里是code

 的#include<升压/ multi_array.hpp>TYPEDEF的boost :: multi_array的< INT,2  - ; ARRAY_TYPE;类arrayclass {
上市:
    arrayclass(ARRAY_TYPE ::的extent_gen范围)
        :多阵列(盘区[3] [4]){
    }
    ARRAY_TYPE多阵列;
};诠释主(){
    ARRAY_TYPE ::的extent_gen程度;
    arrayclass ArrayTest中(跨越);
    arraytest.multiarray.resize(盘区[5] [6]);
    返回0;
}

编辑:这是错误的。

  1 GT; ------启动生成:项目:多阵列,配置:调试的Win32 ------
1> main.cpp中
1> C:\\ Program Files文件(x86)的\\微软的Visual Studio 10.0 \\ VC \\ \\包括xutility(2216):错误C2665:'的std :: _ Copy_impl':没有2重载可以转换所有的参数类型
1&GT; C:\\ Program Files文件(x86)的\\微软的Visual Studio 10.0 \\ VC \\ \\包括xutility(2182):可以是_OutIt std::_Copy_impl<_InIt,_OutIt>(_InIt,_InIt,_OutIt,std::input_iterator_tag,std::output_iterator_tag)'
1&GT;同
1&GT; [
1&GT; _OutIt =的boost ::详细:: multi_array的:: array_iterator&LT; INT,INT *,提振:: MPL ::为size_t 2&GT;,提振::详细:: multi_array的:: sub_array&LT; INT,1&GT;&gt;中
1&GT; _init =提振::详细::的multi_array :: array_iterator&LT; INT,const int的*,提振:: MPL ::为size_t 2&GT;,提振::详细::的multi_array :: const_sub_array&LT; INT,1&GT;&GT;
1&GT; ]
1&GT; C:\\ Program Files文件(x86)的\\微软的Visual Studio 10.0 \\ VC \\ \\包括xutility(2191)或_OutIt std::_Copy_impl<_InIt,_OutIt>(_InIt,_InIt,_OutIt,std::random_access_iterator_tag,std::random_access_iterator_tag)'
1&GT;同
1&GT; [
1&GT; _OutIt =的boost ::详细:: multi_array的:: array_iterator&LT; INT,INT *,提振:: MPL ::为size_t 2&GT;,提振::详细:: multi_array的:: sub_array&LT; INT,1&GT;&gt;中
1&GT; _init =提振::详细::的multi_array :: array_iterator&LT; INT,const int的*,提振:: MPL ::为size_t 2&GT;,提振::详细::的multi_array :: const_sub_array&LT; INT,1&GT;&GT;
1&GT; ]
1&GT;而试图匹配参数列表(提高::详细::的multi_array :: array_iterator&LT; T,TPtr一样,NumDims个,参考&gt;中的boost ::详细::的multi_array :: array_iterator&LT; T,TPtr一样,NumDims个,参考&gt;中提升::详细:: multi_array的:: array_iterator&LT; T,TPtr一样,NumDims个,参考&gt;中的boost ::详细:: iterator_category_with_traversal&LT;类别,穿越&gt;中的boost ::详细:: iterator_category_with_traversal&LT;类别,穿越&GT;)
1&GT;同
1&GT; [
1&GT; T = INT,
1&GT;类TPtr = const int的*
1&GT; NumDims个=升压:: MPL ::为size_t 2&gt;中
1&GT;基准=的boost ::详细:: multi_array的:: const_sub_array&LT; INT,1&GT;
1&GT; ]
1&GT;和
1&GT; [
1&GT; T = INT,
1&GT;类TPtr = const int的*
1&GT; NumDims个=升压:: MPL ::为size_t 2&gt;中
1&GT;基准=的boost ::详细:: multi_array的:: const_sub_array&LT; INT,1&GT;
1&GT; ]
1&GT;和
1&GT; [
1&GT; T = INT,
1&GT;类TPtr = INT *
1&GT; NumDims个=升压:: MPL ::为size_t 2&gt;中
1&GT;基准=的boost ::详细:: multi_array的:: sub_array&LT; INT,1&GT;
1&GT; ]
1&GT;和
1&GT; [
1&GT;分类=的std :: input_iterator_tag,
1&GT;遍历=的boost :: random_access_traversal_tag
1&GT; ]
1&GT;和
1&GT; [
1&GT;分类=的std :: input_iterator_tag,
1&GT;遍历=的boost :: random_access_traversal_tag
1&GT; ]
1&GT; C:\\ Program Files文件(x86)的\\微软的Visual Studio 10.0 \\ VC \\包括\\ xutility(2227):见参考函数模板实例化_OutIt的std :: _ Copy_impl&LT; _Iter,_OutIt&GT;(_ INIT,_init,_OutIt,性病:: TR1 :: false_type)正在编制
1&GT;同
1&GT; [
1&GT; _OutIt =的boost ::详细:: multi_array的:: array_iterator&LT; INT,INT *,提振:: MPL ::为size_t 2&GT;,提振::详细:: multi_array的:: sub_array&LT; INT,1&GT;&gt;中
1&GT; _Iter =的boost ::详细::的multi_array :: array_iterator&LT; INT,const int的*,提振:: MPL ::为size_t 2&GT;,提振::详细::的multi_array :: const_sub_array&LT; INT,1&GT;&gt;中
1&GT; _init =提振::详细::的multi_array :: array_iterator&LT; INT,const int的*,提振:: MPL ::为size_t 2&GT;,提振::详细::的multi_array :: const_sub_array&LT; INT,1&GT;&GT;
1&GT; ]
1&GT; C:\\ boost_1_45_0 \\提升\\的multi_array \\ view.hpp(321):见参考函数模板实例化_OutIt std::copy<boost::detail::multi_array::array_iterator<T,TPtr,NumDims,Reference>,boost::detail::multi_array::array_iterator<T,T * NumDims个,提振::详细:: multi_array的:: sub_array&LT; T,1&GT;&GT;&GT;(_ INIT,_init,_OutIt)正在编制
1&GT;同
1&GT; [
1&GT; _OutIt =的boost ::详细:: multi_array的:: array_iterator&LT; INT,INT *,提振:: MPL ::为size_t 2&GT;,提振::详细:: multi_array的:: sub_array&LT; INT,1&GT;&gt;中
1&GT; T = INT,
1&GT;类TPtr = const int的*
1&GT; NumDims个=升压:: MPL ::为size_t 2&gt;中
1&GT;基准=的boost ::详细:: multi_array的:: const_sub_array&LT; INT,1&gt;中
1&GT; _init =提振::详细::的multi_array :: array_iterator&LT; INT,const int的*,提振:: MPL ::为size_t 2&GT;,提振::详细::的multi_array :: const_sub_array&LT; INT,1&GT;&GT;
1&GT; ]
1&GT; C:\\ boost_1_45_0 \\提升\\的multi_array \\ view.hpp(313):在编译类模板成员函数的boost ::详细:: multi_array的:: multi_array_view&LT; T,NumDims个&GT; &安培;升压::详细:: multi_array的:: multi_array_view&LT; T,NumDims个&GT; ::运算符=(常量的boost ::详细:: multi_array的:: multi_array_view&LT; T,NumDims个&GT;&安培;)
1&GT;同
1&GT; [
1&GT; T = INT,
1&GT; NumDims个= 2
1&GT; ]
1&GT; C:\\ badprogramer \\多阵列\\多阵列\\ main.cpp中(7):见参考文献类模板实例的boost ::详细:: multi_array的:: multi_array_view&LT; T,NumDims个&GT;'正在编译
1&GT;同
1&GT; [
1&GT; T = INT,
1&GT; NumDims个= 2
1&GT; ]
==========生成:0成功,1失败,0了最新,0已跳过==========


解决方案

这是可重复使用VS10(使用正确的VS10头)+提高1.44和调试配置(根据旧版本提振文档以及)。

短期的解决方法(<一个href=\"http://connect.microsoft.com/VisualStudio/feedback/details/488103/error-with-boost-multi-array-version-1-40-when-compiling-with-ds-2010\">until下一个C ++ SP )是

 的#define _ITERATOR_DEBUG_LEVEL 0

一切(STL具体包括之前)。在

有更复杂的可能的解决方案 - 请参阅<一个href=\"http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/3c9eac4f-86e4-490b-bbde-dbd70176b0f8\">this类似的主题。

干杯

I can't get boost::multi_array resizing to work. When I try it, it gives errors about std::_Copy_impl and the like. Here is the code

#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;
}

Edit: Here are the errors

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 ==========

解决方案

This is reproducible with VS10 (using the proper VS10 headers) + boost 1.44 and in debug configuration (according to doc in older versions of boost as well).

The short workaround (until next c++ SP) is to

#define _ITERATOR_DEBUG_LEVEL 0

before everything else (specifically before STL includes).

There are more complicated possible solutions - see this similar thread.

Cheers

这篇关于提高:: multi_array的大小调整不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆