2017-01-07 1 views
1

이 코드에서 std::pair에 대한 typdef이 선언 된 다음 새 typdef를 사용하여 vector이 작성되었습니다. 벡터는 생성자 초기화 목록에서 초기화되었습니다. 벡터에게 at(index) 기능을 사용하려고 할 때 컴파일러는이 오류를 던져 :컴파일러 오류 : std :: pair의 벡터를 사용할 때 일치하는 함수가 없습니다.

/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)); 
} 
+1

'index'는 어디에서 왔습니까? – Kamajii

답변

0

변수의 이름을 바꿉니다. index은 포함 된 일부 라이브러리의 기능입니다. 또는 컴파일러 옵션을 사용하여 작업을 수행 할 수도 있지만 강력하지는 않습니다.

+0

예, 문제가 인덱스 변수 정의에있었습니다. – Youssef

0

오류 메시지가 당신에게 완전한 해답을 제공합니다 : 당신은 ... `표준 : : 벡터 <을 요구하고 있습니다> :: (< 해결되지 않은 오버로드 된 함수 타입>) '에서. 따라서 도서관에서 제공하는 것을 요청하면됩니다.

관련 문제