您的示例代码中有许多错误。
第零个错误在某种程度上与样式相关:类应命名为全小写带下划线或 CamelCase。
第一个错误:
bool compare_identifier(int Identifier, int Identifier);
您不能为两个函数参数使用相同的标识符(此外,与样式相关的函数参数应该全小写或驼峰式),例如
bool compare_identifier(int id1, int id2);
第二个错误是:
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;
第三个错误是你的构造函数没有做你假设它做的事情(构造set_instance
成员),但它会(如果语法上有效)构造一个名为. 所以,你的构造函数应该是这样的:set_instance
IdentifierBucket::IdentifierBucket() :
set_instance(std::bind(compare_identifier, this, _1, _2)) {
}
但这一切都没有实际意义......因为比较器set
也不做你认为它做的事情(看看两个项目是否相等)但它给了它们顺序(默认比较器是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;
};