C++ 在C+中对对象进行排序+;
当我尝试在C中使用比较方法对对象进行排序时,我遇到了一个非常奇怪的错误++C++ 在C+中对对象进行排序+;,c++,class,sorting,C++,Class,Sorting,当我尝试在C中使用比较方法对对象进行排序时,我遇到了一个非常奇怪的错误++ required from 'void std::__final_insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Album*, std::vector<Album> >; _Compar
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*)]'
相册比较方法:
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()
}
}
bool相册::比较相册(常数相册*a1,常数相册*a2)
{
如果(a1->GetArtister()==a2->GetArtister()){
返回(a1->getTitle()getTitle());
}否则{
返回a1->GetArtister()GetArtister()
}
}
错误是:
我不确定有多少是相关的,我对C++还是比较陌生的。您尝试过使用以指针为参数的函数对
std::vector
进行排序。比较函数被赋予对其参数的引用,而不是指针
直接的问题应该简单地通过使用比较函数并从
bool compare(const Album*, const Album*)
到
这里有两个错误。首先,compareAlbums函数需要是一个自由函数,而不是Album类的成员函数。其次,compareAlbums函数必须对相册对象进行常量引用,因为这是存储在向量中的内容。因此,这应该可以解决这个问题:
bool compareAlbums(const Album& a1,const Album& a2)
{
if (a1.getArtist() == a2.getArtist()){
return (a1.getTitle() < a2.getTitle());
} else {
return a1.getArtist() < a2.getArtist()
}
}
bool compareAlbums(常数相册&a1、常数相册&a2)
{
如果(a1.GetArtister()==a2.GetArtister()){
返回(a1.getTitle()
请缩小代码范围并将其张贴在此处。这只是误差的一小部分。请同时发布该行之前的行。请发布完整的错误消息。我猜你可以看出一个句子不是以“required from”开头的,这是一大堆代码。你应该试着把它缩小到一个最小的例子。只需发布所有的错误。在为我们提供所有代码的情况下,这更有意义。但请尽量缩小两者的范围。错误消息中的签名表明它不是一个非静态成员函数。他可能删掉了一个静态的@Potatoswatter,这是因为他在头文件中有两个compareAlbums声明,一个作为自由函数,一个作为非静态成员函数(在这两种情况下,它们都接受指针)。然而,在cpp文件中,他只实现了成员函数。因此,解决方案是删除成员函数声明,更新自由函数声明以获取常量引用,并使用我在cpp文件中提供的定义。啊,他在寻找链接错误。请注意,如果不使用特殊语法&Album::compareAlbums
,则无法获取PTMF,这是一个不太可能的新手错误。
bool compare(Album const &, 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()
}
}