Qt中应用STL算法库编译error分析

首先,使用QCreator新建一个默认的mainwindow工程,在修改mainwindow.cpp的代码如下:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
#include

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    InitVector();     // 初始化容器,QVector
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::InitVector()
{
    m_vecFileName << "cat" << "dog" << "horse" << "fish" << "bird";
}

void MainWindow::PrintName(QString& name)
{
    qDebug() << name << '\n';
}

void MainWindow::on_pushButton_clicked()
{
    //std::for_each(m_vecFileName.begin(), m_vecFileName.end(), PrintName);
    std::sort(m_vecFileName.begin(), m_vecFileName.end());
    for each(auto var in m_vecFileName)
    {
        qDebug() << var << '\n';
    }

    std::sort(m_vecFileName.begin(), m_vecFileName.end(), CompareTail);
    foreach(auto var, m_vecFileName)
    {
        qDebug() << var << '\n';
    }
}

bool MainWindow::CompareTail( const QString& name1, const QString name2 )
{
    if (*(name1.end()-1) < *(name2.end()-1))
        return true;
    else
        return false;
}
编译。。。
错误如下:
1>mainwindow.cpp(39): error C3867: “MainWindow::CompareTail”: 函数调用缺少参数列表;请使用“&MainWindow::CompareTail”创建指向成员的指针
1>mainwindow.cpp(39): error C2780: “void std::sort(_RanIt,_RanIt)”: 应输入 2 个参数,却提供了 3 个
1>           C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\algorithm(3699) : 参见“std::sort”的声明

错误分析:
1,错误指向 “std::sort(m_vecFileName.begin(), m_vecFileName.end(), CompareTail);”
2,应该是“ CompareTail”这种调用函数指针的方式不正确,std::sort不能识别第三个参数;

调试:
按照编译器的提示,将 CompareTail”改为 “MainWindow::CompareTail”,报新的错误

解决:
在将错误信息直接扔到百度,找到了一个解决方案:
将函数” bool MainWindow::CompareTail( const QString& name1, const QString name2 )“声明为static即可。
分析:functor不支持类的非静态成员函数的调用方式。

你可能感兴趣的:(Qt中应用STL算法库编译error分析)