STL:重载和吸气方法
STL: overloading and getter method
这个头文件描述的对象需要放在priority_queue中;因此我在下面的代码底部进行了运算符重载。当我尝试在优先级队列中的进程成员上调用 getter 函数之一时,出现以下格式的错误:
测试.cpp:XX:错误:通过...如。。。的论点...丢弃限定符
如您所见,我通过将某些变量声明为公共变量来尝试一种廉价的解决方法,但是当我尝试从主程序更改这些变量时,它说它无法更改只读文件中的变量。我对STL很陌生。 有哪些方法可以解决这个问题,或者解决方法?
class process
{
int priority; //for priority queues
public:
process();
~process(){};
void setPri(int newPri) {priority = newPri;}
int getPri() {return priority;}
};
class compareProcess
{
public:
bool operator() (process& param1, process& param2)
{
if (param1.getPri() > param2.getPri()) return true;
else return false;
}
};
可能你需要写
bool operator() ( const process& param1, const process& param2) const { ... }
这意味着需要根据 http://www.cplusplus.com/reference/queue/priority_queue/的要求const
参数
您收到的错误表明您正在将 const 对象作为参数传递,该参数是对非 const 对象的引用。 可能的问题是这一行:
bool operator() (process& param1, process& param2)
由于此方法不会以任何方式更改传递的对象,因此应将它们声明为 const:
bool operator() (process const & param1, process const & param2)
如果尝试传递 process const
对象,或者尝试传递无法绑定到非 const 引用的临时process
,则可能会发生这种情况。
您必须更改process
的定义,以便任何不更改对象的方法也声明为const
,否则您将无法对这些 const 引用执行太多操作。 (在这种情况下,由于getPri()
未声明为 const 方法,因此您将无法调用它。
使getPri()
成为常量函数:
int getPri() const {return priority;}
现在在重载operator()
:
bool operator() (const process& param1, const process& param2) const
{
return param1.getPri() > param2.getPri();
}
编辑:你应该使所有"getter"函数const
不会改变对象的状态。
相关文章:
- C++:涉及继承和"using"时的方法重载
- 如何让编译器在C++中更喜欢常量方法重载?
- 为什么方法重载或枚举标志定义会触发 gcc7.2 编译器警告?
- C++模板方法重载和具有多态性的类访问
- 基于方法重载类
- 方法重载 C++ -> 只有一个方法调用
- 如何使用 SFINAE 禁用方法重载集?
- 使用类别方法重载 NSDecimalNumber 上的算术运算符
- C++继承和方法重载混淆
- 多态性和方法重载在C++中几乎是一样的
- 了解方法重载规则
- c++编译错误涉及方法重载的2个模板函数
- Qt/Qml 和方法重载
- 参数或方法重载的幻数
- 为什么C++更喜欢这个模板方法而不是方法重载
- C++方法重载
- 在C++中使用非友元方法重载 I/O 运算符 |&istream 和 &ostream 函数
- 插入方法重载
- 函数重载和方法重载之间的区别
- 正在解决跨基类的虚拟方法重载