这是家庭作业,虽然它已经用不同的方法提交了。
我从 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]