vs2010环境编译CEGUI,以及0x标准的nullptr关键字

来源:互联网 发布:为什么淘宝点不开客服 编辑:程序博客网 时间:2024/05/21 04:00

总的来说用VS2010编译CEGUI_0.7.1跟用2008和2005编译步骤差不多,网上也有了不少教程,这里我简单描述一下:

 

1.去官网下载源码包和依赖库包

http://www.cegui.org.uk/

下载最新的0.7.1的就可以,依赖包下载vs2010的

 

2.把依赖包解压后的dependencies文件夹放在CEGUI-0.7.1目录下

 

3.进入CEGUI-0.7.1/projects/premake文件夹,运行built_vs2008.bat和build_samples_vs2008.bat

这里CE编写了一个专门的程序来生成对应版本的的sln。但是这里没有2010的,没关系,使用2008的转换一下就可以。

 

4.使用vs2010打开CEGUI.sln

按提示对话框转换成2010的sln。

 

5.修改源代码

这样直接编译的话会出现编译错误,描述如下:

 

1> CEGUIMultiColumnList.cpp
1>d:/program files/microsoft visual studio 10.0/vc/include/xmemory(205): error C2440: 'initializing' : cannot convert from 'int' to 'CEGUI::ListboxItem *'
1> Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast

 

这里明显是模板参数不能推导,vs2010的STL在模板参数检查上更严格,CEGUI原来的代码使用0来作为空指针将无法推导成CEGUI::ListboxItem *类型。也就是以前传统的C++编程常用的以0(NULL宏)来代表空指针的方法将被vs2010的STL拒绝。而支持了c++0x标准的vc10则在语法上定义了一个关键字来代表空指针:nullptr。

 

那么解决方法是把CEGUIMultiColumnList.cpp的第702行由

d_grid[i].d_items.insert(d_grid[i].d_items.begin() + position, 0);

改成

d_grid[i].d_items.insert(d_grid[i].d_items.begin() + position, nullptr);

 

在查阅MSDN后发现,nullptr是提供给托管和本地两种C++语言,而__nullptr仅仅提供给本地C++。在使用vs2010开发的时候,可以直接使用__nullptr关键字。

 

接下来可以编译debug和release的代码了。

 

6.编译sample

按照上面的步骤编译sample的sln即可。这里不需要修改代码。

 

运行示例如下图。

 

原创粉丝点击