C++ 指针容器
我在声明指向类实例的STL指针集时遇到了一些问题。更具体地说,我有这样一个场景: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
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());