我正在尝试对存储在另一个对象中的对象数组进行排序,然后显示已排序的对象。我想通过特定属性对这些对象进行排序。我不确定我应该如何运行sort()方法。
composer.h
class Composer {
Public:
int get_ranking();
..
..
};
database.h
Class Database {
Public:
void DisplayAll(){
for(int i=0;i<next_slot_;i++){
composers_[i].Display();
}
};
bool SortByRank(Composer const & a, Composer const & b) {
return a.get_ranking() < b.get_ranking();
};
void DisplayByRank(){
sort(composers_, composers_+next_slot_, SortByRank);
DisplayAll();
};
testdatabase.cpp
int main(){
Database myDB;
Composer& comp1 = myDB.AddComposer("Ludwig van", "Beethoven", "Romantic", 1770,
"Beethoven was completely deaf during the latter part of his life - he
never heard a performance of his 9th symphony.");
comp1.Promote(7);
Composer& comp2 = myDB.AddComposer("Johann Sebastian", "Bach", "Baroque", 1685,
"Bach had 20 children, several of whom became famous musicians as well.");
comp2.Promote(5);
cout << endl << "all Composers: " << endl << endl;
myDB.DisplayAll();
myDB.DisplayByRank();
当我跑步时,我得到:
错误:将'const Composer'作为'int Composer :: get_ranking()'的'this'参数传递,丢弃限定符[-fpermissive]返回a.get_ranking()&lt; b.get_ranking();
和
错误:没有用于调用'sort(Composer [100],Composer *,未解析的重载函数类型)的匹配函数 sort(composers_,composers_ + next_slot_,SortByRank);
将const添加到get_ranking()的末尾似乎已经解决了const正确性错误。
答案 0 :(得分:0)
您应该将const
添加到get_ranking
方法。
class Composer {
public:
int get_ranking() const;
};
这是C ++ const-correctness的一部分。这意味着该方法不会更改对象的内部状态(除了很少使用的mutable
字段之外)它被调用并允许通过const
个对象调用此方法。
答案 1 :(得分:0)
好吧,所以我做了相当多的阅读并学到了一点。
通过将int get_ranking();
更改为int get_ranking()const
来解决我的常规正确性后,我发现我的SortByRank()仍然无法正常工作。这是因为它是数据库的非静态成员,需要this
指针。只需将其更改为:static bool SortByRank();
或在Database类之外定义SortByRank()即可解决问题。