在cpp中返回一对时出错

时间:2013-01-23 05:13:47

标签: c++ compiler-errors binary-tree

我有以下代码:

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

这会导致以下错误:

  

无法将'(new new(4u),(,((int *))))'从'int *'转换为'std :: pair,bool&gt;'
  “template struct std :: pair”

的模板参数列表中参数1的类型/值不匹配

这可能是什么问题?

2 个答案:

答案 0 :(得分:3)

除了new(除非必须使用新内容)和return之外,为了构建pair,请使用前面提到的make_pair()函数或者像这样调用构造函数:pair<T1, T2>(v1, v2)。您正在将类型(pair<T1, T2>)与值进行混合以初始化该类型的实例(v1, v2)。

答案 1 :(得分: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的值来实例化模板。