サンプル コードには多くのエラーがあります。
0 番目のエラーはスタイルに多少関連しています。クラスは all-lowercase-with-underscores または CamelCase という名前にする必要があります。
最初のエラー:
bool compare_identifier(int Identifier, int Identifier);
次のように、両方の関数パラメーターに同じ識別子を使用することはできません (また、スタイル関連の関数パラメーターはすべて小文字またはキャメルケースにする必要があります)。
bool compare_identifier(int id1, int id2);
2番目のエラーは次のとおりです。
std::set <Identifier, bool(*)(Identifier, Identifier)> set_instance;
class Identifier
あなたがどこかに持っていると仮定します。あなたのクラスはIDENTIFIERS
. クラスがある場合は、関数が次のようになっていると想定する必要があります。Identifier
compare_identifier
bool compare_identifier(const Identifier& id1, const Identifier& id2);
あなたのset_instance
宣言は次のようなものです:
std::set<Identifier, bool(*)(const Identifier&, const Identifier&)> set_instance;
3 番目のエラーは、コンストラクターが想定していること (set_instance
メンバーの構築) を行わず、(構文的に有効な場合) というローカル変数を構築することですset_instance
。したがって、コンストラクターは次のようになります。
IdentifierBucket::IdentifierBucket() :
set_instance(std::bind(compare_identifier, this, _1, _2)) {
}
しかし、これはすべて議論の余地があります...コンパレーターset
もあなたが思っていることをしませんが(2つのアイテムが等しいかどうかを確認してください)、順序を与えます(デフォルトのコンパレーターはstd::less
...
あなたが本当に欲しいのは次のようなものです:
#include <set>
#include <functional>
struct Identifier {};
struct IdentifierComparator {
IdentifierComparator() {};
bool operator()(Identifier id1, Identifier id2); // WRITE THIS
};
class IdentifierBucket {
public:
IdentifierBucket() {};
~IdentifierBucket() {};
private:
std::set <Identifier, IdentifierComparator> set_instance;
};