在此代码中声明了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));
}
答案 0 :(得分:0)
重命名变量。 index
是某个库中包含的函数。或者,您可以使用编译器选项执行某些操作,但它不够健壮。
答案 1 :(得分:0)
错误消息为您提供了完整的答案:您要求`std :: vector&lt; ...&gt; :: at(&lt; unresolved overloaded function type&gt;)'。所以,只要问一下图书馆提供的东西,你应该没问题。