我想排序存储在另一个对象内的对象数组,然后显示排序的对象。我想按特定属性对这些对象进行排序。我不完全确定我应该如何运行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();
当我运行此我得到:
error: passing 'const Composer' as 'this' argument of 'int Composer::get_ranking()' discards qualifiers [-fpermissive] return a.get_ranking() < b.get_ranking();
和
error: no matching function for call to 'sort(Composer [100], Composer*, unresolved overloaded function type)' sort(composers_, composers_+next_slot_, SortByRank);
添加一个const,以get_ranking结束()似乎已经解决了const正确性错误。
在'SortByRank'中,'Composer'是const,'get_ranking()'不是。繁荣。 – Borgleader
你真的得到了一个错误信息的子字符串“和错误:”,或者是你与他们之间的单词“和”(而不是换行符)连接的两个单独的错误消息? –
你真的需要练习阅读C++错误:'错误:将'const Composer'作为'int'的参数传递给'Composer :: get_ranking()'丢弃限定符,即你的方法不是const正确的。 – rlbond