我尝试从对象调用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
为什么其定义良好的类型
答案 0 :(得分: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)
...