在類中,我試圖通過傳遞相同類的方法來排序向量。但它在編譯時會出錯。任何人都可以告訴問題是什麼?謝謝!傳遞類方法而不是std :: sort中的函數
它提供了以下錯誤: 參數bool (Sorter::)(D&, D&)' does not match
bool類型(分揀機:: *)(d &,d &)」
我一直在使用sortBynumber(D const& d1, D const& d2)
#include<vector>
#include<stdio.h>
#include<iostream>
#include<algorithm>
class D {
public:
int getNumber();
D(int val);
~D(){};
private:
int num;
};
D::D(int val){
num = val;
};
int D::getNumber(){
return num;
};
class Sorter {
public:
void doSorting();
bool sortByNumber(D& d1, D& d2);
std::vector<D> vec_D;
Sorter();
~Sorter(){};
private:
int num;
};
Sorter::Sorter(){
int i;
for (i = 0; i < 10; i++){
vec_D.push_back(D(i));
}
};
bool Sorter::sortByNumber(D& d1, D& d2){
return d1.getNumber() < d2.getNumber();
};
void Sorter::doSorting(){
std::sort(vec_D.begin(), vec_D.end(), this->sortByNumber);
};
int main(){
Sorter s;
s.doSorting();
std::cout << "\nPress RETURN to continue...";
std::cin.get();
return 0;
}
你爲什麼要'sortByNumber'作爲成員函數?它也可以是一個免費的功能。 – Naveen 2010-05-11 05:16:01
你不必明確說明'D'的析構函數。編譯器可以免費獲得完全相同的代碼。更少的代碼,更少的錯誤。 ;)另外,我看到'Sorter :: vector'是公開的。只是一個觀察;這可能不是你想要的。另一件事:如果你知道向量的大小,那麼你可以在'Sorter'的初始化列表中指定它,以避免重新分配。其他人已經談到了const-correctness的重要性,所以你應該注意這一點。最後一件事情是:在for循環中,你應該有'i'作爲循環的局部變量。 – wilhelmtell 2010-05-11 06:02:07