2017-11-09 12 views
-2

私は素朴なファイルシステムを実装しようとしています。 は、私はこのクラス属性以上のC++カスタムコンパレータ

class BaseFile { 
private: 
    string name; 

public: 
    BaseFile(string name); 
    string getName() const; 
    void setName(string newName); 
     bool operator < (const BaseFile& str) const; 
     bool operator > (const BaseFile& str) const; 

    virtual int getSize() = 0; 

}; 

と私は機能SortBySize()を活性化することにより、属性のサイズによって、一度vector<BaseFile*>子供をソートする必要があるサブクラス

class Directory : public BaseFile { 
private: 
    vector<BaseFile*> children; 
    Directory *parent; 

public: 
    Directory(string name, Directory *parent); r 
    Directory *getParent() const; 
    void setParent(Directory *newParent); 
    void removeFile(string name); 
    void removeFile(BaseFile* file); 
    void sortByName(); 
    bool SortSize(BaseFile& a , BaseFile& b); 
    void sortBySize(); 
    vector<BaseFile*> getChildren(); n 
    int getSize(); 
    string getAbsolutePath(); 

}; 

を持っています。 名前で関数SortByName()によって。 私は事業者<>と私はカスタム比較関数を定義したい番号(サイズ)のために、オーバーロード名についてstd::sort()

を使用するソートアルゴリズムを使用傾けます。

クラスDirectoryで関数を定義しました。私はそれが

bool Directory::SortSize(BaseFile& a , BaseFile& b) 
{ 
    return (a.getSize() < b.getSize()); 
} 

を動作しませんでした静的で作ってみましたが、私はstd::(children.begin(), children.end(), sortSize)

を使用するとき、私は「非静的メンバ関数の無効な使用」を取得します。 助けてください?ラムダ式を使ったサイズでソートするには

+2

は '' static'メンバ関数をSortSize'ください。 –

+0

これはC++を使った私の3日目です...より具体的なことができます –

+0

もしあなたがその新しい人なら、あなたは少し速く走っていると思います。深呼吸を取って、いくつかのステップを取り戻す、[良い初心者の本をいくつか入手する](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) 。本は、あなたが知る必要があることを教えるべきです。 –

答えて

0

vector<BaseFile*> files; 
std::sort(files.begin(), files.end(), 
      [](const BaseFile* a, const BaseFile* b) 
      { return a->getSize() < b->getSize(); }); 
+0

ラムダの場合は、末尾の戻り値の型を使用するか、または単に推測させる必要があります。 –

+0

@BenjaminLindley - ありがとうございました。 – RandomBits