2

我在声明指向类实例的 STL Set 指针时遇到了一些麻烦。更具体地说,我有这种情况:

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() 函数。如果我把这个声明的函数(在结构之外),编译器说它需要一个类型。

现在我的疑虑在这里(我猜不仅是一个,而且是相关的):

  • 一组指针的正确声明是什么?
  • 比较指针的比较函数的正确声明是什么?

在发布之前,我确实在很多地方查找过,但我发现这些引用令人困惑,并且与我的特殊情况不太相关(就像我认为的那样愚蠢微不足道 - 实际上,也许这就是原因)。所以,任何好的链接也有很大的帮助!

提前致谢!

4

2 回答 2

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;

编译就好了。

于 2009-06-16T02:47:16.710 回答
1

由于您没有显示 'getFileName()' 方法应该在哪里,所以我只是冒昧地假设您并不是要在比较器中双重取消引用您的指针。即,您应该执行以下任一操作:

return (file_1->getFileName() < file_2->getFileName());

或者:

return ((*file_1).getFileName() < (*file_2).getFileName());

但不是两者兼而有之。

于 2009-06-16T02:48:37.830 回答