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)

它被解释为三个不同的参数(引号使其更明显):

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

并且由此产生的扩展没有意义。

通常可以解决这个问题的方法是使用 typedef:

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