Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 指针容器_C++_Pointers_Stl_Containers - Fatal编程技术网

C++ 指针容器

C++ 指针容器,c++,pointers,stl,containers,C++,Pointers,Stl,Containers,我在声明指向类实例的STL指针集时遇到了一些问题。更具体地说,我有这样一个场景: class SimulatedDiskFile { private: // ... public: // ... struct comparator { bool operator () (SimulatedDiskFile* const& file_1, SimulatedDiskFile* const& file_2) { return

我在声明指向类实例的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;
类模拟diskfile{
私人:
// ...
公众:
// ...
结构比较器{
bool运算符()(模拟diskfile*const和file_1,模拟diskfile*const和file_2){
返回((*文件1)->getFileName()<(*文件2)->getFileName());
}
};
}
排版文件集;
上面的代码不起作用。编译器说它没有找到成员SimulatedDiskFile::comparator()函数。如果我将函数与此声明放在一起(在结构外部),编译器会说它需要一个类型

下面是我的疑问(我想不仅是一个,而且是相关的):

  • 一组指针的正确声明是什么
  • 比较指针的比较函数的正确声明是什么
在发布之前,我确实查阅了很多地方,但我发现这些参考资料令人困惑,而且与我的特殊情况不太相关(尽管我认为这是愚蠢的琐事——事实上,也许这就是原因)。所以,任何好的链接都是非常有帮助的

提前谢谢

修复一些小故障

#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;
#包括
类模拟diskfile{
公众:
int getFileName(){return 23;}
结构比较器{
bool运算符()(模拟diskfile*文件1,模拟diskfile*文件2){
返回(file_1->getFileName()getFileName());
}
};
};
typedef std::set文件集;

编译得很好。

因为您没有显示“getFileName()”方法应该在哪里,所以我要冒一个险,假设您不想在比较器中双重取消对指针的引用。即,您应该执行以下任一操作:

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

返回((*file_1.getFileName()<(*file_2.getFileName());

但不是两者都有。

为我编译(在g++上),只是比较中有一个错误,因为你们都在解引用指针,然后还使用间接寻址。尝试更改语法以这种方式获得它。仍然没有编译,确切的消息是'g++-Wall-g-c modules/sources/model.cpp-o obj/model.o modules/sources/model.cpp:56:error:no'bool SimulatedDiskFile::comparator(SimulatedDiskFile*const&,SimulatedDiskFile*const&)'类'SimulatedDiskFile''中声明的成员函数@Rafael:这个示例对我来说也很好。也许你可以发布一段更完整的代码,真实地再现特定的错误?是的@Rafael,就像@goldPseudo所说的那样——我给出的这个片段(复制并粘贴到一个文件中)上的确切命令行编译得很愉快(也有几个g++版本)。请复制并粘贴它,并尝试确认没有损坏的g++;-),然后编辑您的答案,以显示最小的完整失败案例!
return ((*file_1).getFileName() < (*file_2).getFileName());