编译器错误:尝试使用std :: pair的向量时没有匹配函数

时间:2017-01-07 14:02:01

标签: c++ qt

在此代码中声明了typdef std::pair,然后使用新的typdef创建了vector。向量在构造函数初始化列表中初始化。当尝试使用向量at(index)函数时,编译器会抛出此错误:

/home/user/compositionwidget/compositionwidget.cpp:53: error: no matching function for call to ‘std::vector<std::pair<QPainter::CompositionMode, QString> >::at(<unresolved overloaded function type>)’
     imagePainter.setCompositionMode(comp_pair_vector.at(index).first);
                                                              ^
typedef std::pair< QPainter::CompositionMode, QString >  comp_pair ;

class CompositionWidget : public QWidget
{
Q_OBJECT

public:
    CompositionWidget(QWidget * parent = 0) ;

protected:
    void paintEvent(QPaintEvent *event);

private:
    QImage * dest_image, *src_image ;
    std::vector <comp_pair>  comp_pair_vector;
    comp_pair curr_composition;
};

在compositionwidget.cpp文件中:

    CompositionWidget::CompositionWidget (QWidget *parent)
    :QWidget (parent),
      comp_pair_vector
{
          comp_pair(QPainter::CompositionMode_Clear, "CompositionMode_Clear"),
          comp_pair (QPainter::CompositionMode_ColorBurn , "CompositionMode_ColorBurn"),
          comp_pair (QPainter::CompositionMode_ColorDodge , "CompositionMode_ColorDodge")              
}
{
 src_image =  new QImage   ("/home/user/compositionwidget/images/butterfly.gif") ;

}


void CompositionWidget::paintEvent(QPaintEvent * event)

{
    qDebug() << "CompositionWidget::paintEvent()........" ;

    QPainter imagePainter (this) ;
    dest_image->scaled(size()) ;
    imagePainter.drawPixmap(0,0, width(), height(),
                            QPixmap::fromImage(*dest_image));

    src_image->scaled(size()) ;
    imagePainter.setCompositionMode(comp_pair_vector.at(index).first);
    imagePainter.drawPixmap(0,0, width(), height(),
                            QPixmap::fromImage(*src_image));
}

2 个答案:

答案 0 :(得分:0)

重命名变量。 index是某个库中包含的函数。或者,您可以使用编译器选项执行某些操作,但它不够健壮。

答案 1 :(得分:0)

错误消息为您提供了完整的答案:您要求`std :: vector&lt; ...&gt; :: at(&lt; unresolved overloaded function type&gt;)'。所以,只要问一下图书馆提供的东西,你应该没问题。

相关问题