这是家庭作业,虽然它已经用不同的方法提交了。
我从 Visual Studio 2008 得到以下信息
错误 C2893:无法专门化函数模板 'void std::sort(_RanIt,_RanIt,_Pr)'
代码如下
主文件 数据库<>数据库; db.loadDatabase(); db.sortDatabase(sort_by_title()); 数据库.cpp 无效数据库<C>::sortDatabase(const sort_by &s) { std::sort(db_.begin(), db_.end(), s); }
函数对象定义为
struct sort_by : public std::binary_function<const Media *, const Media *, bool> { virtual bool operator()(const Media *l, const Media *r) const = 0; }; 结构排序依据标题:公共排序依据{ bool operator()(const Media *l, const Media *r) const { ... } }; ...
这里有什么药?
[编辑]对不起,也许我应该明确继承
模板 <typename C = std::vector<Media *> > 类数据库:公共 IDatabase<C>
[/编辑]
[Edit2]
在工具箱的建议(这似乎很合理)之后,我得到了以下错误消息
错误 C2664:“Database<>::sortMedia”:无法将参数 1 从“sort_by_title”转换为“const sort_by &”
main.cpp 仍然是相同的,但对函子层次结构和源文件进行了一些细微的修改。前向声明等不起作用,所以我不得不将定义放在单独的文件中。
搜索.h 结构 sort_by_impl { virtual bool operator()(const Media *l, const Media *r) const = 0; }; struct sort_by : public std::binary_function<const Media *, const Media *, bool> { sort_by_impl *sbp; bool operator()(const Media *l, const Media *r) const { 返回 (*sbp)(l, r); } }; 数据库.h 结构 sort_by_title :公共 sort_by_impl { bool operator()(const Media *l, const Media *r) const { 返回 (l->getTitle() < r->getTitle()); } };
我真的不明白这一点,我在这里错过了什么?一些转换操作,还是什么?
[/编辑2]
[Edit3]
我希望是最后也是最后的编辑。在调试和重写一些代码之后,我实际上得到了这个工作。这就是我最终的结果,这是我能做的最好的
类 sort_by : public std::binary_function<const Media *, const Media *, bool> { 上市: sort_by(sort_by_impl *sbp) : sbp_(sbp) {}; bool operator()(const Media *l, const Media *r) const { 返回 (*sbp_)(l, r); } 私人的: sort_by_impl *sbp_; }; 主文件 db.sortDatabase(&sort_by_title()); 数据库.cpp 无效数据库<C>::sortDatabase(const sort_by &s) { std::sort(db_.begin(), db_.end(), s);
这似乎有效,无论是在一个单独的项目(今天大部分时间都在搞砸这个)和我几天前提交的实际项目中。
非常感谢您的时间和帮助!
[/编辑3]