2011-12-21 54 views
0

我试图通过使用排序谓词创建类指针的向量自定义排序的向量:麻烦建立在C自定义排序++的指针

struct sort_by_airtime                        
{                             
    inline bool operator() (const Network *n1, const Network *n2)             
    {                            
     return (n1->airtime() < n2->airtime());                  
    }                            
};  

对于每一个网络,我们的排序由float由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 

我不是指定传递给谓词正确的说法?通话时间()由继承网络类的类实现。

+1

当您在类(或结构体)中定义函数时,不需要明确地说'内联'。 – 2011-12-21 19:29:12

回答

3

你的成员函数应该被声明为const成员函数。

5

编译器警告您,Network::airtime()忽略n1n2上的const限定符。

解决方法是创建一个“const正确”版本的Network::airtime()(假设它实际上不会修改任何内容)。

查看this answer举例。因为您使用的是operator()该指针指向Network类型的const对象

virtual float Network::airtime() const 
           ^^^^^ //this makes the function const 

1

Network::airtime()不是const,所以不能通过sort_by_airtimeconst Network*调用。

如果可能,最好的解决办法是使airtime()为const;否则将sort_by_airtime参数更改为Network*