当前位置: 首页 > 知识库问答 >
问题:

将C中的一组向量包装成一个元组

艾宁
2023-03-14

我试图将两个向量的元组包装成C中的元组,但无法解码神秘的编译器错误消息。

以下是代码片段(请原谅我使用指令):

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> >() );

共有1个答案

端木安国
2023-03-14

如果我复制那个代码片段,我会收到一些奇怪的错误消息

make_tuple( tuple< vector<int>, vector<int> >() );

与 c 4.3.3.但是,如果我调用make_tuple,因为它应该用一对向量变量调用,一切都很好:

vector<int> v1;
vector<int> v2;
tuple< vector<int>, vector<int> > vecvec = make_tuple( v1, v2 );

这个也是如此:

int x;
tuple< int, vector<int> > intvec = make_tuple( x, v1 );
 类似资料:
  • 在努力使所有必要的计数变量正确后,我沮丧地发现它不起作用。第一次,是 它被强制为一个整数,因此变成。 在第二个循环重复中,只包含红色,变成一个简单的整数向量,。 我做错了什么?是否有一种方法可以初始化,这样它就不会被转换成一个数字向量,而是变成一个向量列表? 还有,除了“滚我自己的”,还有别的办法做整件事吗?

  • 使用C 14,我试图扩展此实现,以支持将在外部调用的ObserverCallback方法。 MyClass容器使用元组向量,其类型由可变模板指定。然后可以使用Access访问vector 我需要的是实现一个观察器,它应该向向量添加元素。由于元素的类型可以是元组中的任何类型,因此我也对其进行了模板化: 包装器类中似乎有错误: 作为参考,我还附上完整的源代码清单:

  • 问题内容: 许多模板语言都有“ slots”或“ yield”语句,它们允许进行某种形式的控制反转,以将一个模板包装在另一个模板中。 Angular具有“ transclude”选项。 Rails有收益声明。如果React.js拥有yield语句,它将看起来像这样: 所需的输出: React,React.js没有。如何定义包装器组件以实现相同的输出? 问题答案: 尝试: 有关更多信息,请参见文档中

  • 许多模板语言都有“slots”或“yield”语句,它们允许进行某种形式的控制反转,将一个模板包装在另一个模板中。 唉,react.js没有。我如何定义包装器组件以实现相同的输出?

  • 有没有办法将第一个和第二个元素替换为向量中的所有元组?假设我有这样的东西: 元组的第一个元素现在是1和3,第二个元素是2和4。有容易使2和4成为第一个元素吗?

  • 我用平面图附加通量,但如果我添加其他平面图,则只返回最后一个平面图。 我需要在通量上处理每个Mono函数,但我似乎无法让每个函数正确执行和返回。