2017-01-07 2 views
1

このコードでは、std::pairtypdefが宣言されましたが、新しいtypdefを使用してvectorが作成されました。このベクトルは、コンストラクタの初期化リストで初期化されました。コンパイラはこのエラーをスローベクトルat(index)機能を使用しようとすると:compositionwidget.cppファイル内コンパイラスルーエラー: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::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

エラーメッセージはあなたに完全な答えを与える:あなたは... `のstd ::ベクトル<のために求めている> ::(<未解決のオーバーロードされた関数型>「)で。だから、図書館が提供するものを頼むだけで、あなたはうまくいくはずです。

関連する問題