0

我正在将我们的产品从 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 宏。会看看会发生什么,虽然,即使它解决了我不太喜欢那个解决方案的情况。

提前致谢

4

2 回答 2

0

Would using a inline function definition in qt/c++ code help?

inline vartype localName(int* framePtr, int i){
  return framePtr->localCachePtr->varName0.at(i);
}

Since it is possible to have more functions of same name but different parameters(count) this should call the correct function and being inline this will replaced at compile time.

Edit: Mhh, i just saw your problem is probably the inverse? You cannot compile because localName(Something) always calls the macro. You definitly will have to remove the macro, but using it as inline function call will hopefully solve the problem.

于 2013-07-17T12:56:21.833 回答
0

这里的正常解决方案是为 tcl 内容创建一个包装类。任何 tcl 标头的唯一包含将在包装类的实现中,并且不会包含来自 Qt 的任何内容。

于 2013-07-17T13:42:36.333 回答