优先级队列不编译

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;
        }