我在声明一个指向类实例的STL指针集时遇到了一些麻烦。更具体地说,我有这种情况:
class SimulatedDiskFile {
private:
// ...
public:
// ...
struct comparator {
bool operator () (SimulatedDiskFile* const& file_1, SimulatedDiskFile* const& file_2) {
return ((*file_1)->getFileName() < (*file_2)->getFileName());
}
};
}
typedef set<SimulatedDiskFile*, SimulatedDiskFile::comparator> FileSet;
上面的代码不起作用。编译器说它没有找到成员SimulatedDiskFile :: comparator()函数。如果我把这个声明放在函数中(在struct之外),编译器说它期待一个类型。
现在这里有我的怀疑(不仅是一个,而且相关,我猜):
在发布之前,我确实在许多地方查找过,但是我发现这些引用令人困惑,与我的特殊情况并不完全相关(因为我认为它是愚蠢的 - 实际上,也许这就是原因)。所以,任何好的链接也都有很大的帮助!
提前致谢!
答案 0 :(得分:5)
修复一些故障,
#include <set>
class SimulatedDiskFile {
public:
int getFileName() { return 23; }
struct comparator {
bool operator () (SimulatedDiskFile* file_1, SimulatedDiskFile* file_2) {
return (file_1->getFileName() < file_2->getFileName());
}
};
};
typedef std::set<SimulatedDiskFile*, SimulatedDiskFile::comparator> FileSet;
编译得很好。
答案 1 :(得分:1)
因为你没有显示'getFileName()'方法应该在哪里,所以我只是想走出困境,并假设你并不是要在比较器中重新引用你的指针。即,你应该做:
return (file_1->getFileName() < file_2->getFileName());
或:
return ((*file_1).getFileName() < (*file_2).getFileName());
但不是两者。