2014-04-13 216 views
0

出於某種原因,自定義比較似乎被跳過。從不打印調試字符串,排序關閉。C++不重載運算符

任何人都可以發現這裏有什麼問題嗎?

bool Communication::operator<(const Communication& second) const 
{ 
    qDebug() << "Actually sorting"; 
    return (getName().compare(second.getName()) < 0); 
} 

class Communication 
{ 
public: 
    bool operator<(const Communication& second) const; 
    QString getName() const; 
    void setName(QString nm); 
    QString commName; 
} 

void Communication::addComm(vector<Communication*>c) 
{ 
    // This is called for sure 
    lg=c; 
    std::sort (lg.begin(), lg.end()); 
} 

編輯: 下面我的新方法。

bool Communication::cmp(const Communication* lhs, const Communication* rhs) const 
{ 
    return (lhs->getName().compare(rhs->getName()) < 0); 
} 

...error: no matching function for call to 'sort(std::vector<Communication*>::iterator, std::vector<Communication*>::iterator, <unresolved overloaded function type>)' 
+0

你有沒有'的#include '? –

回答

8

你的載體包含指針:

vector<Communication*> c 

,但你的比較是值。您需要實現指針的比較,但這不能是operator<,因爲您無法爲指針重載該運算符。它應該是一個函數或函數。

bool cmp(const Communication* lhs, const Communication* rhs) 
{ 
    return (lhs->getName().compare(rhs->getName()) < 0); 
} 

std::sort (lg.begin(), lg.end(), cmp); 
+0

謝謝。但是,我現在得到了我添加到原始問題的錯誤。 – RobotRock

+0

@RobotRock'cmp'不應該是一個成員函數。 – juanchopanza

+0

謝謝!不知道! – RobotRock

1

你是一個排序的Communication*vector,但你的operator<比較const Communication&

2

運營商不會爲運營商重載運營商。如果要排序的基礎上的指針對象的謂詞指針的序列,您需要使用合適的謂詞函數,例如:

std::sort(lg.begin(), lg.end(), 
    [](Communication const* c0, Communication const* c1){ 
     return *c0 < *c1; 
    });