2012-10-27 41 views
1

我tryt從對象調用QMetaObject :: invokeMethod中給調用者對象 我有這個從對象:錯誤C2976:「QMAP」:在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

的問題是,C++預處理器是不知道的模板,Q_ARG是宏。

當預處理器會看到:

Q_MAP(foo<bar,baz>,blop) 

它解釋爲三個不同的參數(行情,使其更可見):

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

所得擴張沒有意義。

的東西,通常有效地駁斥這是使用typedef:

typedef QMap<QString,QVector<std::string> > MyStringVectorMap; 
... 
Q_MAP(MyStringVectorMap, linksQTResultMap) 
...