我有以下代码:
return new std::pair<BST<Data>::iterator(cursor), true>;
这会导致以下错误:
无法将 '(operator new(4u), (, ((int*))))' 从 'int*' 转换为 'std::pair, bool>'
模板参数列表中参数 1 的类型/值不匹配模板结构 std::pair'
这里可能有什么问题?
我有以下代码:
return new std::pair<BST<Data>::iterator(cursor), true>;
这会导致以下错误:
无法将 '(operator new(4u), (, ((int*))))' 从 'int*' 转换为 'std::pair, bool>'
模板参数列表中参数 1 的类型/值不匹配模板结构 std::pair'
这里可能有什么问题?
除了new
(除非必须,否则不要使用 new)和return
,为了构造 a pair
,请使用上述make_pair()
函数或调用构造函数,如下所示pair<T1, T2>(v1, v2)
:您将类型 ( pair<T1, T2>
) 与初始化该类型实例 ( v1, v2
) 的值混合在一起。
你想返回什么?值对还是指向新对象对的指针?在函数声明中查看返回类型以了解您的意图可能很有用。
如果您想退回一对,您最好使用:
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) { }
};
您正在尝试使用我们需要类型T1
和T2
.