我正在尝试使用排序谓词为类指针向量创建自定义排序:
struct sort_by_airtime
{
inline bool operator() (const Network *n1, const Network *n2)
{
return (n1->airtime() < n2->airtime());
}
};
对于每个网络,我们按照airtime()返回的浮点数进行排序。
现在,我尝试使用如下:
std::vector<Network *> Simulator::sort_networks(std::vector<Network *> netlist, bool sort_airtime) {
std::vector<Network *> new_netlist = netlist;
if(sort_airtime) {
sort(new_netlist.begin(), new_netlist.end(), sort_by_airtime());
}
}
但是,我遇到了很多这样的错误:
In file included from Simulator.cpp:7:
Simulator.h: In member function ‘bool Simulator::sort_by_airtime::operator()(const Network*, const Network*)’:
Simulator.h:48: error: passing ‘const Network’ as ‘this’ argument of ‘virtual float Network::airtime()’ discards qualifiers
Simulator.h:48: error: passing ‘const Network’ as ‘this’ argument of ‘virtual float Network::airtime()’ discards qualifiers
我没有正确指定传递给谓词的参数吗? airtime()由继承Network类的类实现。
答案 0 :(得分:5)
编译器警告您Network::airtime()
忽略了const
和n1
上的n2
限定符。
解决方案是创建const
的“Network::airtime()
- 正确”版本(假设它实际上没有修改任何内容)。
有关示例,请参阅this answer。
答案 1 :(得分:3)
您的成员函数应声明为const
成员函数:
virtual float Network::airtime() const
^^^^^ //this makes the function const
因为您在operator()
中使用的指针指向const
类型的Network
个对象。
答案 2 :(得分:1)
Network::airtime()
不是const
,因此无法通过const Network*
中的sort_by_airtime
来调用。
如果可能,最好的解决方案是使airtime()
const;否则将sort_by_airtime
参数更改为Network*
。