2015-09-02 59 views
0

我试图使用stable_sort将一个向量指针stable_sort in C++

排序到某个类。我有一个这样的代码:

#include <iostream> 
#include <vector> 
#include <algorithm> 

using namespace std; 

class B 
{ 
    public : 
     B(int y, int j) {x = y, r = j;}; 

     void getVal() {cout << x << endl; }; 

     int x; 
     int r; 
}; 


bool compareB(B* b1, B* b2) 
{ 
    return b1->getVal() < b2->getVal(); 
} 

int main() 
{ 
    B b1(3, 4), b2(-5, 7), b3(12, 111); 

    vector<B*> myVec; 
    myVec.push_back(&b1); 
    myVec.push_back(&b2); 
    myVec.push_back(&b3); 

    std::stable_sort(myVec.begin(), myVec.end(), compareB); 
    for (size_t size = 0; size < myVec.size(); ++size) 
    { 
     myVec[size]->getVal(); 
    } 

    return 0; 
} 

不过,我得到了foolowing错误,而它编译:

“错误:类型‘无效’和‘无效’二进制‘操作<’无效操作数 return b1-> getVal()< b2-> getVal();“

有人可以帮助我吗?

+3

你'getVal'返回'void'。也许应该是'int'? –

+2

...并且实际返回值而不是仅打印它。 –

回答

4

问题是与

void getVal() {cout << x << endl; }; 

它返回void,而不是一定价值。

当你在return b1->getVal() < b2->getVal();中使用它时,它归结为return void < void;,它不会编译。

你应该能够将其更改为

int getVal() { return x; };