优先级队列不编译
priority queue not compiling
我正在努力创建一个 class 的优先级队列,我创建的这个队列叫做 Chore。 class 只包含给定杂务的名称和该杂务的优先级,数字越大意味着优先级越高。我用普通队列测试了 class 并且一切正常,所以我猜问题出在我的运算符过载中。 main函数创建5个Chore对象并压入队列,然后按顺序输出队列。
家务class:
#include <string>
#include <iostream>
class Chore{
public:
Chore(std::string s = "N/A", int i = 0){chore = s; pnumber = i;}
friend bool operator <(Chore c1, Chore c2){
return c1.pnumber < c2.pnumber;
}
void input(){
std::cout << "Enter type of chore: ";
std::cin >> chore;
std::cout << "Enter priority level: ";
std::cin >> pnumber;
}
void output(){
std::cout << "Chore: " << chore << std::endl << "Priority level: " << pnumber << std::endl;
}
private:
std::string chore;
int pnumber;
};
主要功能:
#include <queue>
#include "chore.h"
using namespace std;
int main(){
priority_queue<Chore> q;
Chore temp;
for(int i = 0; i < 5; i++){
temp.input();
q.push(temp);
}
cout << endl;
for(int i = 0; i < 5; i++){
q.top().output();
q.pop();
}
}
我在编译时遇到的错误是:
error: passing 'const Chore' as 'this' argument discards qualifiers [-fpermissive]
q.top().output();
问题是我的运算符超载了吗?我该如何解决这个问题?
你的 output
函数需要是 const
void output() const {
std::cout << "Chore: " << chore << std::endl << "Priority level: " << pnumber << std::endl;
}
我正在努力创建一个 class 的优先级队列,我创建的这个队列叫做 Chore。 class 只包含给定杂务的名称和该杂务的优先级,数字越大意味着优先级越高。我用普通队列测试了 class 并且一切正常,所以我猜问题出在我的运算符过载中。 main函数创建5个Chore对象并压入队列,然后按顺序输出队列。
家务class:
#include <string>
#include <iostream>
class Chore{
public:
Chore(std::string s = "N/A", int i = 0){chore = s; pnumber = i;}
friend bool operator <(Chore c1, Chore c2){
return c1.pnumber < c2.pnumber;
}
void input(){
std::cout << "Enter type of chore: ";
std::cin >> chore;
std::cout << "Enter priority level: ";
std::cin >> pnumber;
}
void output(){
std::cout << "Chore: " << chore << std::endl << "Priority level: " << pnumber << std::endl;
}
private:
std::string chore;
int pnumber;
};
主要功能:
#include <queue>
#include "chore.h"
using namespace std;
int main(){
priority_queue<Chore> q;
Chore temp;
for(int i = 0; i < 5; i++){
temp.input();
q.push(temp);
}
cout << endl;
for(int i = 0; i < 5; i++){
q.top().output();
q.pop();
}
}
我在编译时遇到的错误是:
error: passing 'const Chore' as 'this' argument discards qualifiers [-fpermissive]
q.top().output();
问题是我的运算符超载了吗?我该如何解决这个问题?
你的 output
函数需要是 const
void output() const {
std::cout << "Chore: " << chore << std::endl << "Priority level: " << pnumber << std::endl;
}