我正在将我们的产品从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: error:宏"localName“需要2个参数,但只给出了1个
有什么建议来解决这个纠缠吗?
在tcl中取消定义宏。我将看看会发生什么,尽管,即使它修复了这种情况,我也不太喜欢这个解决方案。
提前感谢
发布于 2013-07-17 20:56:22
在qt/c++代码中使用内联函数定义会有帮助吗?
inline vartype localName(int* framePtr, int i){
return framePtr->localCachePtr->varName0.at(i);
}由于有可能有更多同名不同参数(Count)的函数,这应该调用正确的函数,并且是内联的,它将在编译时被替换。
编辑: Mhh,我刚刚看到你的问题可能是相反的?你不能编译,因为localName(某物)总是调用宏。您肯定会删除宏,但使用它作为内联函数调用将有望解决问题。
发布于 2013-07-17 21:42:36
这里通常的解决方案是为tcl类创建一个包装类。唯一包含的tcl头将在包装器类的实现中,而不包含来自Qt的任何内容。
https://stackoverflow.com/questions/17700050
复制相似问题