我将产品从tcl-8.4移植到tcl-8.5.12
在新版本的tcl中有一个在tclInt.h中定义的宏
#define localName(framePtr, i) \
((&((framePtr)->localCachePtr->varName0))[(i)])
我的产品也使用Qt-4.7.4。在qt-4.7.4 / include / QtXml / qdom.h中有属性
QString localName() const;
结果我收到错误:qt-4.7.4 / include / QtXml / qdom.h:165:23:错误:宏“localName”需要2个参数,但只有1个给定
有任何解决此问题的建议吗?
在tcl中转到undef宏。会看到会发生什么,尽管,即使它解决了这种情况,我也不太喜欢那种解决方案。
提前致谢
答案 0 :(得分:0)
在qt / c ++代码中使用内联函数定义会有帮助吗?
inline vartype localName(int* framePtr, int i){
return framePtr->localCachePtr->varName0.at(i);
}
由于可能有更多相同名称但不同参数(count)的函数,因此应调用正确的函数并在内联时将其替换为编译时。
编辑:嗯,我刚看到你的问题可能是反过来的?您无法编译,因为localName(Something)始终调用宏。你肯定会删除宏,但使用它作为内联函数调用将有望解决问题。
答案 1 :(得分:0)
这里的常规解决方案是拥有一个包装类 tcl的东西。唯一包含任何tcl标题的都是 包装类的实现,而不是 包括Qt的任何内容。