gpt4 book ai didi

C++ 编程候选函数不可行

转载 作者:行者123 更新时间:2023-11-28 02:13:27 26 4
gpt4 key购买 nike

我正在尝试创建一个优先级队列,其中最顶部的元素包含最小的整数。我做了一个函数对象来比较。一切进展顺利,但是,每当我尝试打印出最上面的元素时 std::cout<<pq.top<<std::endl我收到一条错误消息:

candidate function not viable: no known conversion from 'const value_type' (aka 'const Foo') to
'const void *' for 1st argument; take the address of the argument with &
basic_ostream& operator<<(const void* __p);

我对编程真的很陌生,所以我真的不知道该怎么做。

#include<iostream>
#include<queue>
#include <vector>


class Foo
{
public:
int data;
Foo(int data): data(data) {}
};

class Compare
{
public:
int operator() (Foo dat1, Foo dat2)
{
if( dat1.data < dat2.data )
return dat1.data;
else return dat2.data;
}
};

int main()
{
std::priority_queue<Foo, std::vector<Foo>, Compare> pq;

pq.push(5);
pq.push(7);
pq.push(1);
pq.push(2);
pq.push(3);

std::cout << pq.top() << std::endl;
return 0;
}

最佳答案

您从未定义输出 Foo 的方法.你可以使用

std::cout << pq.top().data << std::endl; 

或者你可以重载 operator<<对于 Foo像这样输出

class Foo
{
public:
int data;
Foo(int data) : data(data) {}
friend std::ostream & operator<<(std::ostream& os, const Foo & f)
{
return os << f.data;
}
};

您的比较函数也有问题。比较函数应返回 true如果dat1.data > dat2.data为了让最小的元素到达顶部。有了它,您应该将其更改为:

bool operator() (const Foo& dat1, const Foo& dat2)
{
return dat1.data > dat2.data;
}

关于C++ 编程候选函数不可行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34877824/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com