编译器通过错误:尝试使用 std::p air 向量时没有匹配函数

compiler through error: no matching function when trying to use vector of std::pair

本文关键字:向量 air 函数 std 错误 过错 编译器      更新时间:2023-10-16

在此代码中,声明了std::pairtypdef,然后使用新的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;
};

在组合小部件中.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));
}

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

错误消息给出了完整的答案:您要求的是"std::vector<...>::at(<未解析的重载函数类型>)'。所以,只要问图书馆提供的东西,你应该没事。