【发布时间】:2014-01-14 14:20:41
【问题描述】:
我试图在 C++ 中将两个向量的元组包装成一个元组,但不能 解码神秘的编译器错误消息。
这里是 sn-p(请原谅我使用 using 指令):
using namespace std;
make_tuple( tuple< vector<int>, vector<int> >() )
这是 Visual Studio 2010 中的错误消息
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\tuple(127): error C2664: 'std::vector<_Ty>::vector(const std::allocator<_Ty> &)' : cannot convert parameter 1 from 'std::tr1::_Nil' to 'const std::allocator<_Ty> &'
with
[
_Ty=int
]
Reason: cannot convert from 'std::tr1::_Nil' to 'const std::allocator<_Ty>'
with
[
_Ty=int
]
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\tuple(127) : see reference to function template instantiation 'std::tr1::_Cons_node<_Car,_Cdr>::_Cons_node<std::tr1::_Nil&,std::tr1::_Nil&,std::tr1::_Nil&,std::tr1::_Nil&,std::tr1::_Nil&,std::tr1::_Nil&,std::tr1::_Nil&,std::tr1::_Nil&,std::tr1::_Nil&,std::tr1::_Nil&>(_Farg0,_Farg1,_Farg2,_Farg3,_Farg4,_Farg5,_Farg6,_Farg7,_Farg8,_Farg9)' being compiled
with
[
_Car=std::vector<int>,
_Cdr=std::tr1::_Tuple_type<std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil>::_Type,
_Farg0=std::tr1::_Nil &,
_Farg1=std::tr1::_Nil &,
_Farg2=std::tr1::_Nil &,
_Farg3=std::tr1::_Nil &,
_Farg4=std::tr1::_Nil &,
_Farg5=std::tr1::_Nil &,
_Farg6=std::tr1::_Nil &,
_Farg7=std::tr1::_Nil &,
_Farg8=std::tr1::_Nil &,
_Farg9=std::tr1::_Nil &
]
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxtuple0(9) : see reference to function template instantiation 'std::tr1::_Cons_node<_Car,_Cdr>::_Cons_node<const std::vector<_Ty>&,std::tr1::_Nil&,std::tr1::_Nil&,std::tr1::_Nil&,std::tr1::_Nil&,std::tr1::_Nil&,std::tr1::_Nil&,std::tr1::_Nil&,std::tr1::_Nil&,std::tr1::_Nil&>(_Farg0,_Farg1,_Farg2,_Farg3,_Farg4,_Farg5,_Farg6,_Farg7,_Farg8,_Farg9)' being compiled
with
[
_Car=std::vector<int>,
_Cdr=std::tr1::_Cons_node<std::vector<int>,std::tr1::_Tuple_type<std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil>::_Type>,
_Ty=int,
_Farg0=const std::vector<int> &,
_Farg1=std::tr1::_Nil &,
_Farg2=std::tr1::_Nil &,
_Farg3=std::tr1::_Nil &,
_Farg4=std::tr1::_Nil &,
_Farg5=std::tr1::_Nil &,
_Farg6=std::tr1::_Nil &,
_Farg7=std::tr1::_Nil &,
_Farg8=std::tr1::_Nil &,
_Farg9=std::tr1::_Nil &
]
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\tuple(86) : see reference to function template instantiation 'std::tr1::tuple<_Arg0,_Arg1>::tuple<const std::vector<_Ty>&>(_Farg0)' being compiled
with
[
_Arg0=std::vector<int>,
_Arg1=std::vector<int>,
_Ty=int,
_Farg0=const std::vector<int> &
]
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\tuple(389) : see reference to function template instantiation 'std::tr1::_Cons_node<_Car,_Cdr>::_Cons_node<_Arg0,std::tr1::_Cons_node<_Arg0,_Cdr>>(const std::tr1::_Cons_node<_Arg0,std::tr1::_Cons_node<_Arg0,_Cdr>> &)' being compiled
with
[
_Car=std::tr1::tuple<std::vector<int>,std::vector<int>>,
_Cdr=std::tr1::_Tuple_type<std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil>::_Type,
_Arg0=std::vector<int>
]
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xxtuple1(18) : see reference to function template instantiation 'std::tr1::tuple<_Arg0,_Arg1,_Arg2,_Arg3,_Arg4,_Arg5,_Arg6,_Arg7,_Arg8,_Arg9>::tuple<std::vector<_Ty>,std::vector<_Ty>,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil,std::tr1::_Nil>(std::tr1::tuple<std::vector<_Ty>,std::vector<_Ty>> &)' being compiled
with
[
_Arg0=std::tr1::tuple<std::vector<int>,std::vector<int>>,
_Arg1=std::tr1::_Nil,
_Arg2=std::tr1::_Nil,
_Arg3=std::tr1::_Nil,
_Arg4=std::tr1::_Nil,
_Arg5=std::tr1::_Nil,
_Arg6=std::tr1::_Nil,
_Arg7=std::tr1::_Nil,
_Arg8=std::tr1::_Nil,
_Arg9=std::tr1::_Nil,
_Ty=int
]
main.cpp(19) : see reference to function template instantiation 'std::tr1::tuple<_Arg0,_Arg1,_Arg2,_Arg3,_Arg4,_Arg5,_Arg6,_Arg7,_Arg8,_Arg9> std::tr1::make_tuple<std::tr1::tuple<std::vector<_Ty>,std::vector<_Ty>>>(_Arg0)' being compiled
with
[
_Arg0=std::tr1::tuple<std::vector<int>,std::vector<int>>,
_Arg1=std::tr1::_Nil,
_Arg2=std::tr1::_Nil,
_Arg3=std::tr1::_Nil,
_Arg4=std::tr1::_Nil,
_Arg5=std::tr1::_Nil,
_Arg6=std::tr1::_Nil,
_Arg7=std::tr1::_Nil,
_Arg8=std::tr1::_Nil,
_Arg9=std::tr1::_Nil,
_Ty=int
]
我的代码有什么问题?
编辑: 如果我明确说明结果类型,那么它可以工作。
make_tuple<tuple<tuple< vector<int>> >>( tuple< vector<int> >() );
编辑:
误报,如果我声明make_tuple 的类型,它也不会编译。
make_tuple<tuple<tuple< vector<int>, vector<int> > >>( tuple< vector<int>, vector<int> >() );
【问题讨论】:
-
你能发布一个 SSCCE(见 sscce.org)吗?我的代码版本在 GCC 4.7.3 上编译。
-
OP 使用 VS2010 不支持...
-
我的天啊... C++ 语法糖壳已经崩溃,我们甚至可以看到 LISP 在粘液中蠕动 :)
标签: c++ visual-studio-2010 templates compiler-errors