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

来源:互联网 发布:python 对象转字符串 编辑:程序博客网 时间:2024/06/05 14:25
首先,使用QCreator新建一个默认的mainwindow工程,在修改mainwindow.cpp的代码如下:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
#include

MainWindow::MainWindow(QWidget *parent) :
   QMainWindow(parent),
    ui(newUi::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 inm_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, constQString 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: “voidstd::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不支持类的非静态成员函数的调用方式。

0 0
原创粉丝点击