2016-05-25 11 views
0

私はサブスクリプションマネージャーを書いていますが、信号とスロットの接続が作成され、複数のサブスクリプションがスロットにフックされている可能性があります。新しいデータが通知されます。QObject :: connectエラーをラップする

問題であり、ここで、私は「setupSubscription」と呼ばれるメソッドを持っていますサブスクリプションを管理し、私のクラスにはプロトタイプであること:

void setupSubscription(enum eSlotID ID 
          ,const QObject* pobjSender 
          ,const QMetaMethod& pobjSignal 
          ,const QMetaMethod& pobjSlot); 

eSlotIDは、スロットごとに固有のIDが含まれている列挙型、購読者は購読をセットアップするためのIDを簡単に指定するという考え方です。開発とsetupSubscriptionためのコードの初期段階で

その:もちろん

void clsSlotSub::setupSubscription(enum eSlotID ID 
             ,const QObject* pobjSender 
             ,const QMetaMethod& pobjSignal 
             ,const QMetaMethod& pobjSlot) { 
     QObject::connect(pobjSender, pobjSignal, this, pobjSlot); 
    } 

が、まだこの中に行くために多くのですが、これは、コンパイルでエラーが発生します。

error: no matching function for call to 'clsSlotSub::setupSubscription(clsSlotSub::eSlotID, Fcs::Mount*, void (Fcs::Mount::*)(Fcs::qfloat32), void (clsSlotSub::*)(float))' 
           ,&clsSlotSub::update2Elevation); 
                  ^

私は、セットアップ方法でラップする前に、プロトタイプがデバッガの接続をシングルステップ実行していることが正しいと考えています。

クラスの実装とプロトタイプが一致してエラーとして表示されるかどうかはわかりません。使用の

例:

msSlotSubMngr.setupSubscription(clsSlotSub::ELEVATION_ANGLE 
            ,Fcs::Mount::GetRef() 
            ,&Fcs::Mount::signalElevation 
            ,&clsSlotSub::update2Elevation); 

msSlotSubMngrスロット、サブスクリプションクラスのインスタンスです。

これは包装前に、元のコードであり、これは、エラーなしでコンパイル:

QObject::connect(Fcs::Mount::GetRef() 
        ,&Fcs::Mount::signalElevation 
        ,mpobjElevStrip 
        ,&clsElevStrip::elevationChanged); 

Iは、作業コードを設定された単一場合、この接続方法のプロトタイプである:

 static QMetaObject::Connection connect(const QObject *sender 
              ,const QMetaMethod &signal 
              ,const QObject *receiver 
              ,const QMetaMethod &method 
              ,Qt::ConnectionType type = Qt::AutoConnection); 

宣言eSlotIDの:

enum eSlotID { 
    ... 
    /*1003*/ ,ELEVATION_ANGLE 
    ... 
    }; 

スロットプロトタイプ:

void update2Elevation(float fltValue); 

スロット実装:

void clsSlotSub::update2Elevation(float fltValue) { 
     qDebug() << "clsSlotSub::New elevation: " << fltValue; 
    } 

答えて

0

問題は見つかりましたが、プロトタイプとはまったく関係がありませんでしたが、エラー/原因はコンパイラによって報告されませんでした。必要なヘッダーが含まれていないことが判明しました。

0

あなたはあなたの呼び出し元のコードを表示する必要があります。このエラーメッセージから、setupSubscriptionのスペルを間違えたように見えます。

+0

これは答えではなく、本当にオプションでもありません。これで十分であり、プロトタイプと関数の実装が含まれています。 – SPlatten

+0

エラーを見つけるには3つのことが必要です。あなたはそのうちの2つを見せました。しかし、私たちが呼び出しコードを見なければ、あなたが示したコードに正しい引数を渡したかどうかを知る方法がありません。 –

+0

渡されるパラメータはQObject :: connectを直接呼び出す場合とまったく同じで、これは動作します。 – SPlatten

関連する問題