Ogre::UINT 与 其余库的 类型冲突问题

今天 为 使用 Ogre 开发的游戏前端 添加网络操做, 导入 网络应用库时出现了 类型冲突,前端

网络应用库定义了 UINT:

// basetype.h
...
typedef unsigned int UINT;


// ExampleApplication.h
...
using namespace Ogre;

// net.h
...
UINT port ; //没法决策

// main.cpp
#include "basetype.h"
#include "ExampleApplication.h"
#include "net.h"

编译时  和 Ogre::UINT 冲突, 是编译器 没法决策使用哪一个 类型,开始的第一种解决方案是 修改 Ogre 的 ExampleApplication.h 等文件, 使不使用windows

using namespace Ogre;

但这样就 修改了 Ogre; 第二种方式是修改 本来的 net 网络应用库, 使 自定义的的 UINT 在 命名空间 myLib 下:网络

// basetype.h
...
namespace myLib
{
    typedef unsigned int UINT;
};


并在使用时(尤为在 h 文件中), 用 full 方式使用:
// net.h
...
myLib::UINT port ;

不错, 这样 Ogre 编写的这个游戏前端可以有效编译, 可是 在编译另一个 只使用 网络引用库时, 编译出错, 出现函数

UINT : 不明确的符号
多是 D:\program files\microsoft sdks\windows\v7.0a\include\windef.h(173) : unsigned int UINT” 
或 basetype.h  : myLib::UINT

在一看 网络应用库的实现代码中 通篇 都是 using namespace MyLib ; 语句, 是 MyLib 的 UINT 污染了 windef.h 的UINT 声明, 就和上面的 Ogre::UINT 的 using namespace Ogre 冲突与 UINT, 为此须要修改 网络应用库的 各个文件, 使都明确使用  myLib::UINT, 可是一旦某个文件中使用了spa

using namespace MyLib, 问题仍是存在, 因此 不适用 using namespace xxx 语句, 同时为了书写方便, 最终 网络应用库修改为:code

声明类型时使用 命名空间:
namespace myLib
{
     typedef unsigned int UINT;  
}

// net.h
声明时, 使用全名称:
myLib::UINT port;

void func( myLib::UINT  ID);

// net.cpp
定义时, 在函数内部使用 using myLib::UINT:
void func( myLib::UINT ID )
{
      using MyLib::UINT;

      UINT tempID = ID;
}
相关文章
相关标签/搜索