Function Pointer Array compiliert mit GCC, mit VS2010 aber nicht.
-
Hi
Ich habe hier einen Code, den gcc brav compiliert, aber VS 2010 nicht. Konkret
geht es um die Zeile "fptrArrayType fpntTab;", wo ein boost::multi_array Zeiger
auf Methoden einer Klasse speichert.template<class T_DERIVED,class T_RET> class FSM { typedef T_RET(T_DERIVED::*mtdPtr)(); typedef boost::multi_array<mtdPtr ,2> fptrArrayType; protected: fptrArrayType fpntTab; }Die Fehlermeldung von VS2010 ist etwas länger:
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xutility(2216): error C2665: "std::_Copy_impl": Durch keine der 2 Überladungen konnten alle Argumenttypen konvertiert werden. 2> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xutility(2182): kann '_OutIt std::_Copy_impl<_InIt,_OutIt>(_InIt,_InIt,_OutIt,std::input_iterator_tag,std::output_iterator_tag)' sein 2> with 2> [ 2> _OutIt=boost::detail::multi_array::array_iterator<unsigned int,unsigned int *,boost::mpl::size_t<2>,boost::detail::multi_array::sub_array<unsigned int,1>>, 2> _InIt=boost::detail::multi_array::array_iterator<unsigned int,const unsigned int *,boost::mpl::size_t<2>,boost::detail::multi_array::const_sub_array<unsigned int,1>> 2> ] 2> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xutility(2191): oder "_OutIt std::_Copy_impl<_InIt,_OutIt>(_InIt,_InIt,_OutIt,std::random_access_iterator_tag,std::random_access_iterator_tag)" 2> with 2> [ 2> _OutIt=boost::detail::multi_array::array_iterator<unsigned int,unsigned int *,boost::mpl::size_t<2>,boost::detail::multi_array::sub_array<unsigned int,1>>, 2> _InIt=boost::detail::multi_array::array_iterator<unsigned int,const unsigned int *,boost::mpl::size_t<2>,boost::detail::multi_array::const_sub_array<unsigned int,1>> 2> ] 2> bei Anpassung der Argumentliste '(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>)' 2> with 2> [ 2> T=unsigned int, 2> TPtr=const unsigned int *, 2> NumDims=boost::mpl::size_t<2>, 2> Reference=boost::detail::multi_array::const_sub_array<unsigned int,1> 2> ] 2> and 2> [ 2> T=unsigned int, 2> TPtr=const unsigned int *, 2> NumDims=boost::mpl::size_t<2>, 2> Reference=boost::detail::multi_array::const_sub_array<unsigned int,1> 2> ] 2> and 2> [ 2> T=unsigned int, 2> TPtr=unsigned int *, 2> NumDims=boost::mpl::size_t<2>, 2> Reference=boost::detail::multi_array::sub_array<unsigned int,1> 2> ] 2> and 2> [ 2> Category=std::input_iterator_tag, 2> Traversal=boost::random_access_traversal_tag 2> ] 2> and 2> [ 2> Category=std::input_iterator_tag, 2> Traversal=boost::random_access_traversal_tag 2> ] 2> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xutility(2227): Siehe Verweis auf die Instanziierung der gerade kompilierten Funktions-template "_OutIt std::_Copy_impl<_Iter,_OutIt>(_InIt,_InIt,_OutIt,std::tr1::false_type)". 2> with 2> [ 2> _OutIt=boost::detail::multi_array::array_iterator<unsigned int,unsigned int *,boost::mpl::size_t<2>,boost::detail::multi_array::sub_array<unsigned int,1>>, 2> _Iter=boost::detail::multi_array::array_iterator<unsigned int,const unsigned int *,boost::mpl::size_t<2>,boost::detail::multi_array::const_sub_array<unsigned int,1>>, 2> _InIt=boost::detail::multi_array::array_iterator<unsigned int,const unsigned int *,boost::mpl::size_t<2>,boost::detail::multi_array::const_sub_array<unsigned int,1>> 2> ] 2> C:\windev\otherLib\boost_1_46_1\boost/multi_array/view.hpp(321): Siehe Verweis auf die Instanziierung der gerade kompilierten Funktions-template "_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)". 2> with 2> [ 2> _OutIt=boost::detail::multi_array::array_iterator<unsigned int,unsigned int *,boost::mpl::size_t<2>,boost::detail::multi_array::sub_array<unsigned int,1>>, 2> T=unsigned int, 2> TPtr=const unsigned int *, 2> NumDims=boost::mpl::size_t<2>, 2> Reference=boost::detail::multi_array::const_sub_array<unsigned int,1>, 2> _InIt=boost::detail::multi_array::array_iterator<unsigned int,const unsigned int *,boost::mpl::size_t<2>,boost::detail::multi_array::const_sub_array<unsigned int,1>> 2> ] 2> C:\windev\otherLib\boost_1_46_1\boost/multi_array/view.hpp(313): Bei der Kompilierung der Klassen-template der 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> &)-Memberfunktion 2> with 2> [ 2> T=unsigned int, 2> NumDims=2 2> ] 2> C:\windev\otherLib\boost_1_46_1\boost/multi_array.hpp(406): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "boost::detail::multi_array::multi_array_view<T,NumDims>". 2> with 2> [ 2> T=unsigned int, 2> NumDims=2 2> ] 2> C:\windev\otherLib\boost_1_46_1\boost/multi_array.hpp(402): Bei der Kompilierung der Klassen-template der boost::multi_array<T,NumDims> &boost::multi_array<T,NumDims>::resize(const boost::detail::multi_array::extent_gen<NumRanges> &)-Memberfunktion 2> with 2> [ 2> T=unsigned int, 2> NumDims=2, 2> NumRanges=2 2> ] 2> FSM.h(35): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "boost::multi_array<T,NumDims>". 2> with 2> [ 2> T=unsigned int, 2> NumDims=2 2> ] 2> FSM.h(36): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "FSM<T_DERIVED,T_RET>".Ideen, was da nicht stimmt? Der Fehler tritt übrigens _nur_ im Debug-Mode
auf, nicht im Release.Danke, lg
-
Die Konstruktion wird von VS2010 mit 32 Bit im Debug-Mode nicht akzeptiert, aber der 32 Bit Release-Mode, sowie 64 Bit im Debug- und Release-Mode sagen, es ist okay.
..insofern wird das jetzt ignoriert.