宏定义的tcl-8.5.12与qt-4.7.4中的方法之间的冲突

时间:2013-07-17 12:41:53

标签: c++ qt tcl build-process

我将产品从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宏。会看到会发生什么,尽管,即使它解决了这种情况,我也不太喜欢那种解决方案。

提前致谢

2 个答案:

答案 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的任何内容。