错误C2976:'QMap':QMetaObject :: invokeMethod中的模板参数太少

时间:2012-10-27 07:11:39

标签: qt signals-slots

我尝试从对象调用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

为什么其定义良好的类型

1 个答案:

答案 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)
...