Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中对对象进行排序+;_C++_Class_Sorting - Fatal编程技术网

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

当我尝试在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*)]'
相册比较方法:

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()
    }
}