我有以下代码:
return new std::pair<BST<Data>::iterator(cursor), true>;
这会导致以下错误:
无法将'(new new(4u),(,((int *))))'从'int *'转换为'std :: pair,bool&gt;'
的模板参数列表中参数1的类型/值不匹配
“template struct std :: pair”
这可能是什么问题?
答案 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) { }
};
您正尝试使用我们需要类型T1
和T2
的值来实例化模板。