3

我有以下代码:

 return new std::pair<BST<Data>::iterator(cursor), true>;

这会导致以下错误:

无法将 '(operator new(4u), (, ((int*))))' 从 'int*' 转换为 'std::pair, bool>'
模板参数列表中参数 1 的类型/值不匹配模板结构 std::pair'

这里可能有什么问题?

4

2 回答 2

3

除了new(除非必须,否则不要使用 new)和return,为了构造 a pair,请使用上述make_pair()函数或调用构造函数,如下所示pair<T1, T2>(v1, v2):您将类型 ( pair<T1, T2>) 与初始化该类型实例 ( v1, v2) 的值混合在一起。

于 2013-01-23T06:09:30.383 回答
2

你想返回什么?值对还是指向新对象对的指针?在函数声明中查看返回类型以了解您的意图可能很有用。

如果您想退回一对,您最好使用:

template <class T1,class T2>
  pair<T1,T2> make_pair (T1 x, T2 y)
  {
    return ( pair<T1,T2>(x,y) );
  }

也就是说,类似:

return  std::make_pair ( BST<Data>::iterator(cursor),  true);

或直接:

return ( pair<T1,T2>(x,y) );

也就是说,类似:

return ( std::pair< BST<Data>::iterator , bool>( cursor, true) );

如果您想要一个指向新创建对象的指针,请使用:

return ( new std::pair< BST<Data>::iterator , bool>( cursor, true) );

现在:

这里可能有什么问题?

看着:

template <class T1, class T2> struct pair
{
  typedef T1 first_type;
  typedef T2 second_type;

  T1 first;
  T2 second;
  pair() : first(T1()), second(T2()) {}
  pair(const T1& x, const T2& y) : first(x), second(y) {}
  template <class U, class V>
    pair (const pair<U,V> &p) : first(p.first), second(p.second) { }
};

您正在尝试使用我们需要类型T1T2.

于 2013-01-23T08:12:52.043 回答