2012-12-11 132 views
-1

我有一个非常奇怪的错误,当我尝试和使用对象进行排序,在C++排序对象

required from 'void std::__final_insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Album*, std::vector<Album> >; _Compare = bool (*)(const Album*, const Album*)]' 

它似乎并没有一个标准误差的比较方法,但我看不到任何东西我的代码错了。这是比较方法还是排序本身的问题。任何帮助将不胜感激。

我附上了相关代码:

Album.cpp:http://pastebin.com/0tNrbdrT

Album.h:http://pastebin.com/iY2Yy7qM

AlbumCollection.cpp:http://pastebin.com/gWj0nS8S

AlbumCollection.h:http://pastebin.com/bFrxme5n

相簿收藏分类:

void AlbumCollection::sortAlbums(){ 
    std::sort(albums.begin(), albums.end(), compareAlbums); 
} 

专辑比较方法:

bool Album::compareAlbums(const Album* a1,const Album* a2) 
{ 
    if (a1->getArtist() == a2->getArtist()){ 
     return (a1->getTitle() < a2->getTitle()); 
    }else{ 
     return a1->getArtist() < a2->getArtist() 
    } 
} 

的错误是:http://pastebin.com/PeXk0FUT

我不知道有多少是相关的,我是很新的C++

+2

请缩小代码并将其发布到此处。 [SSCCE](http://www.sscce.org/) – jrok

+1

这只是错误的一小部分。请张贴那一行之前的行。 – molbdnilo

+2

请发布完整的错误消息。我想你可以告诉一个句子不以“required from”开始 – Angew

回答

3

这里有两个错误。首先,compareAlbums函数需要是一个自由函数,而不是Album类的成员函数。其次,compareAlbums函数必须对Album对象进行const引用,因为这是存储在向量中的内容。所以,这应该修复它:

bool compareAlbums(const Album& a1,const Album& a2) 
{ 
    if (a1.getArtist() == a2.getArtist()){ 
     return (a1.getTitle() < a2.getTitle()); 
    } else { 
     return a1.getArtist() < a2.getArtist() 
    } 
} 
+0

错误消息中的签名表示它不是非静态成员函数。他可能会剪掉一个“静态”。 – Potatoswatter

+0

@Patatoswatter这是因为他的头文件中有两个compareAlbums声明,一个是自由函数,一个是非静态成员函数(两种情况下都是指针)。然而,在cpp文件中,他只实现了成员函数。因此,解决方案是删除成员函数声明,更新自由函数声明以取代const引用,并使用上面在cpp文件中提供的定义。 –

+0

啊,他正在巡航出现链接错误。请注意,如果不使用特殊语法'&Album :: compareAlbums',这是一个不太可能的新手错误,您将无法获得PTMF。 – Potatoswatter

1

您已经尝试使用以指针作为参数的函数对std::vector进行排序。比较函数被赋予对其参数的引用,而不是指针。

眼前的问题应该简单地通过采取比较功能和调整其固定从

bool compare(const Album*, const Album*) 

bool compare(Album const &, Album const &)