• 9628阅读
  • 3回复

Qt与其他程序库发生了名字冲突 [复制链接]

上一主题 下一主题
离线codespy
 
只看楼主 倒序阅读 楼主  发表于: 2008-11-20
— 本帖被 XChinux 执行加亮操作(2008-11-30) —
//qt-win-opensource-src-4.4.0\src\corelib\global\qglobal.h
。。。。。。
#define QT_VERSION 0x040400
/*
  can be used like #if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
*/
#define QT_VERSION_CHECK(major, minor, patch) ((major < <16)|(minor < <8)|(patch))

#define QT_PACKAGEDATE_STR "2008-04-28"

#define QT_PACKAGE_TAG "g62dcb32f1893c32adcb3f1cb40656449b45d8d56"

#if !defined(QT_BUILD_MOC)
#include <QtCore/qconfig.h>
#endif

#ifdef __cplusplus

#ifndef QT_NAMESPACE /* user namespace */ // 这句该怎么用?

# define QT_PREPEND_NAMESPACE(name) ::name
# define QT_USE_NAMESPACE
# define QT_BEGIN_NAMESPACE
# define QT_END_NAMESPACE
# define QT_BEGIN_INCLUDE_NAMESPACE
# define QT_END_INCLUDE_NAMESPACE
# define QT_BEGIN_MOC_NAMESPACE
# define QT_END_MOC_NAMESPACE
# define QT_FORWARD_DECLARE_CLASS(name) class name;
# define QT_MANGLE_NAMESPACE(name) name

#else /* user namespace */

# define QT_PREPEND_NAMESPACE(name) ::QT_NAMESPACE::name
# define QT_USE_NAMESPACE using namespace ::QT_NAMESPACE;
# define QT_BEGIN_NAMESPACE namespace QT_NAMESPACE {
# define QT_END_NAMESPACE }
# define QT_BEGIN_INCLUDE_NAMESPACE }
# define QT_END_INCLUDE_NAMESPACE namespace QT_NAMESPACE {
# define QT_BEGIN_MOC_NAMESPACE QT_USE_NAMESPACE
# define QT_END_MOC_NAMESPACE
# define QT_FORWARD_DECLARE_CLASS(name) \
    QT_BEGIN_NAMESPACE class name; QT_END_NAMESPACE \
    using QT_PREPEND_NAMESPACE(name);

# define QT_MANGLE_NAMESPACE0(x) x
# define QT_MANGLE_NAMESPACE1(a, b) a##_##b
# define QT_MANGLE_NAMESPACE2(a, b) QT_MANGLE_NAMESPACE1(a,b)
# define QT_MANGLE_NAMESPACE(name) QT_MANGLE_NAMESPACE2( \
        QT_MANGLE_NAMESPACE0(name), QT_MANGLE_NAMESPACE0(QT_NAMESPACE))

namespace QT_NAMESPACE {}

# ifndef QT_BOOTSTRAPPED
# ifndef QT_NO_USING_NAMESPACE
  /*
    This expands to a "using QT_NAMESPACE" also in _header files_.
    It is the only way the feature can be used without too much
    pain, but if people _really_ do not want it they can add
    DEFINES += QT_NO_USING_NAMESPACE to theur .pro files.
    */
  QT_USE_NAMESPACE
# endif
# endif

#endif /* user namespace */

#else /* __cplusplus */

# define QT_BEGIN_NAMESPACE
# define QT_END_NAMESPACE
# define QT_USE_NAMESPACE
# define QT_BEGIN_INCLUDE_NAMESPACE
# define QT_END_INCLUDE_NAMESPACE

#endif /* __cplusplus */
。。。。
因为我没有预定义QT_NAMESPACE,所以与其它库出现了名字冲突(其他的库都已经有了明确的名字空间)。
问题是该在哪里定义QT_NAMESPACE这个宏,来解决冲突问题?
奇趣有说 在编译安装的时候定义这个宏吗?那商业版的是如何解决的?

BTW:我使用的是VC++.
离线codespy
只看该作者 1楼 发表于: 2008-11-21
#ifndef QT_NAMESPACE /* user namespace */ // 这句该怎么用?
离线张羽
只看该作者 2楼 发表于: 2011-08-17
难道没有人解决这个问题吗,真是急人啊.
离线张羽
只看该作者 3楼 发表于: 2011-09-13
到现在也没有人解决,在我看来.这个重定义是全局的,名字空间没有用.
快速回复
限100 字节
 
上一个 下一个