我无法将pair<int, int>
类型的对象插入队列。我收到一个奇怪的错误,我不知道如何修复它。有人可以帮忙吗?以下是该方法的代码,后跟错误消息。前两个错误用于插入,最后一个用于operator=
的使用,对此的帮助也将受到赞赏。谢谢!
pair<int,int>* bfSpanningTree(int theVertex)
{
queue< pair<int,int> > pairq;
queue<int> nodeq;
if(linkedAdjacencyList[theVertex]->value == theVertex && linkedAdjacencyList[theVertex]->adj != NULL)
{
Node* whereto;
whereto = linkedAdjacencyList[theVertex]->adj;
while(whereto->adj != NULL)
{
pairq.push(pair< &whereto->value, &whereto->adj->value >);
nodeq.push(whereto->value);
whereto = whereto->adj;
}
while(!nodeq.empty())
{
whereto = linkedAdjacencyList[theVertex]->adj;
while(whereto->adj != NULL)
{
pairq.push(pair<&whereto->value, &whereto->adj->value>);
whereto = whereto->adj;
}
}
}
int i = 0;
pair<int,int>* retVal;
pair<int,int> tree[pairq.size()];
while(!pairq.empty())
{
tree[i] = pairq.pop();
i++;
}
retVal = tree;
return retVal;
}
~UndirectedGraph()
{
for (int i = 0; i < numVerticies; i++)
delete[] linkedAdjacencyList[i];
}
错误:
hw8.h:181:错误:模板参数数量错误(1,应为2)
/ usr / include / c ++ / 4.4 / bits / stl_pair.h:67:错误:提供给
‘template<class _T1, class _T2> struct std::pair’
hw8.h:190:错误:模板参数数量错误(1,应为2)
/ usr / include / c ++ / 4.4 / bits / stl_pair.h:67:错误:提供给
‘template<class _T1, class _T2> struct std::pair’
hw8.h:200:错误:与
‘operator=’
中的‘tree[i] = pairq.std::queue<_Tp, _Sequence>::pop [with _Tp = std::pair<int, int>, _Sequence = std::deque<std::pair<int, int>, std::allocator<std::pair<int, int> > >]()’
不匹配/ usr / include / c ++ / 4.4 / bits / stl_pair.h:68:注意:候选人是:
std::pair<int, int>& std::pair<int, int>::operator=(const std::pair<int, int>&)
答案 0 :(得分:7)
代码行如下:
pairq.push(pair< &whereto->value, &whereto->adj->value >);
应该看起来像:
pairq.push(make_pair(whereto->value, whereto->adj->value));
或value
成员的类型不是int
:
pairq.push(pair<int,int>(whereto->value, whereto->adj->value));
最后,queue::pop()
不会返回任何内容,因此您可能需要:
tree[i] = pairq.front();
pairq.pop();
答案 1 :(得分:1)
看看make_pair()。 queue::pop()不返回第一个元素。您需要以下内容:
tree[i] = pairq.front();
pairq.pop();
答案 2 :(得分:1)
你不能像你已经完成的那样从实际的对象实例中创建一个模板......对于由模板函数实例化的对象(在这种情况下是构造函数),它们必须是TYPES。
因此,例如,您可以使用如下构造函数创建一个对象:
pair<int, int>(whereto->value, whereto->adj->value)
或者您可以使用实用程序函数make_pair()
进行配对,如Michael所示。
但是如果您要使用构造函数,则必须在某处声明将在构造函数声明中替换类型T1
和T2
的类型,即
template<typename T1, typename T2>
pair::pair(const T1& object_1, const T2& object_2);
通过使用所需对象类型的模板参数声明对象(即,对于一对int
对象,您将使用pair<int, int>
),然后调用实际对象成员来完成函数与这些类型的对象(在您的情况下,它将是类pair
的构造函数)。
答案 3 :(得分:0)
乍一看这里有一些事情 - 你能提供Node类/结构定义吗?