1

オブジェクトから呼び出し元オブジェクトに QMetaObject::invokeMethod を呼び出そうとします。オブジェクトからこれを持っています:

bool bReturnInvokeMethod = false;
bool bInvokeMethod1= QMetaObject::invokeMethod(m_pCollector,
                            "setStack",
                            Qt::BlockingQueuedConnection,
                            Q_ARG(QMap<QString,QVector<std::string > >, linksQTResultMap));

しかし、私はこのエラーを受け取ります:

error C2976: 'QMap' : too few template arguments

なぜその明確に定義された型

4

1 に答える 1

5

問題は、C ++プリプロセッサがテンプレートを認識せずQ_ARG、マクロであるということです。

プリプロセッサが確認した場合:

Q_MAP(foo<bar,baz>,blop)

これは、3つの異なる引数(より見やすくするための引用符)として解釈されます。

Q_MAP( "foo<bar" , "baz>" , "blop" )

結果として生じる拡張は意味がありません。

これに対抗するために通常機能するものは、typedefを使用することです。

typedef QMap<QString,QVector<std::string> > MyStringVectorMap;
...
Q_MAP(MyStringVectorMap, linksQTResultMap)
...
于 2012-10-27T07:24:52.620 に答える