这几天想玩一下cocos2dx3.9新版本的东西,但是公司电脑配置不够,开个vs2012都卡的不行,更别提高版本的了。因为cocos2dx-3.9中使用了好多c++11的规范,而vs2012有好多C++11规范不支持,所以生成解决方案失败。只需要修改一些代码的写法就可以了,C++11规范的写法只是新奇了一些,编译器不支持,换个写法我们照样可以实现。下面是代码的修改对比。

---------------------------------------------------------------------------------------------------------
第一处:
NavMeshTest.cpp中:
void NavMeshBaseTestDemo::createAgent(const Vec3 &pos)
{
...
AgentUserData *data = new AgentUserData{ 0.0f };
...
}

改成:

void NavMeshBaseTestDemo::createAgent(const Vec3 &pos)
{
...
AgentUserData *data = new AgentUserData; data->time = 0.0f;
...
}
--------------------------------------------------------------------------------------------------------
第二处:
DrawPrimitivesTest.cpp中:
PrimitivesCommandTest::PrimitivesCommandTest()
{
// draws a quad
V3F_C4B_T2F data[] = {
{{, ,}, {, , ,}, {,}},
{{, ,}, {, ,,}, {,}},
{{,,}, {,, ,}, {,}},
{{, ,}, {,,,}, {,}},
};
...
}

改成:

PrimitivesCommandTest::PrimitivesCommandTest()
{
V3F_C4B_T2F data[];
data[].vertices = Vec3(,,); data[].colors = Color4B(,,,);   data[].texCoords = Tex2F(,);
data[].vertices = Vec3(,,); data[].colors = Color4B(,,,);  data[].texCoords = Tex2F(,);
data[].vertices = Vec3(,,); data[].colors = Color4B(,,,);  data[].texCoords = Tex2F(,);
data[].vertices = Vec3(,,); data[].colors = Color4B(,,,); data[].texCoords = Tex2F(,); ...
}
上面两处修改中原来的版本用到了C++11中初始化列表(Initializer lists)的部分。这个构想是结构或是数组能够依据成员在该结构内定义的顺序通过给予的一串引数来产生。这些初始化列表是递归的,所以结构的数组或是包含其他结构的结构可以使用它们。这对静态列表或是仅是把结构初始化为某值而言相当有用。C++有构造函数,能够重复对象的初始化。但单单只有那样并不足以取代这项特色的所有机能。在C++03中,只允许在严格遵守POD的定义和限制条件的结构及类型上使用这项机能,非POD的类型不能使用,就连相当有用的STL容器std::vector也不行。C++11将会把初始化列表的概念绑到类型上,称作std::initializer_list。这允许构造函数或其他函数像参数般地使用初始化列表。因为初始化列表是真实类型,除了类型构造式之外还能够被用在其他地方。正规的函数能够使用初始化列表作为引数。vs2013及以上版本支持初始化列表功能,但是vs2012不支持。
 
--------------------------------------------------------------------------------------------------------
第三处:
ActionManagerTest.h中
class StopActionsByFlagsTest : public ActionManagerTest
{
... const unsigned int kMoveFlag = 0x01; const unsigned int kScaleFlag = 0x02; const unsigned int kRotateFlag = 0x04; const unsigned int kRepeatForeverFlag = 0x08;
};

改成:

 // 并将类成员的初始化放到构造函数初始化列表中
class StopActionsByFlagsTest : public ActionManagerTest
{
  StopActionsByFlagsTest::StopActionsByFlagsTest()
  : kMoveFlag(0x01)
   , kScaleFlag(0x02)
  , kRotateFlag(0x04)
  , kRepeatForeverFlag(0x08)
  {
  } ... const unsigned int kMoveFlag; const unsigned int kScaleFlag; const unsigned int kRotateFlag; const unsigned int kRepeatForeverFlag;
};
这里原来的版本用到了C++11中非静态成员初始化(Non-static data member initializers)的部分,在C++11标准中,类的非静态成员可以在类的定义中声明并直接初始化类的非静态成员初始化。vs2013中支持这个部分,但是vs2012不支持所以将初始化放到构造函数中。

用vs2012编译cocos2dx-3.9的更多相关文章

  1. vs2012编译cocos2dx 3.10报错解决方法

    新建的一个cocos工程没有改过任何代码直接编译居然报错了? 百度了一下原来是因为vs2012不支持c++11的部分特性 cocos2dx 3.10正好就用到了vs2012不支持的那部分特性,所以报错 ...

  2. 在Xcode 6 beta里编译Cocos2d-x iOS项目时失败

    转载 在Xcode 6 beta里编译Cocos2d-x iOS项目时可能会失败,提示如下错误: Undefined symbols for architecture i386: "_fwr ...

  3. vs2012编译Qwt

    主题:vs2012编译Qwt ------------------------------------------------------------------------- 参照网络地址: htt ...

  4. VS2012 编译 Assimp

    VS2012 编译 Assimp 环境: assimp-3.1.1Windows 7 64BitVisual Studio 2012CMake 2.8.12.1 注意: 在Windows中编译assi ...

  5. 【转】VS2012编译出来的程序,在XP上运行,出现“.exe 不是有效的 win32 应用程序” “not a valid win32 application”

    原文网址:http://www.cnblogs.com/Dageking/archive/2013/05/15/3079394.html VS2012编译出来的程序,在XP上运行,出现“.exe 不是 ...

  6. <转>使用eclipse编译cocos2d-x示例项目,创建cocos2d-x android项目并部署到真机

    准备 今天将cocos2d-x的示例项目tests编译到android真机运行,以及如何创建cocos2d-x的android项目. 打开cocos2d-x的tests项目,路径为:D:\cocos2 ...

  7. VS2012编译Snmp++ v3.2.25

    VS2012编译Snmp++ v3.2.25跟用VC6/VC2010等编译方法区别不大. 网上和教程上盛传的方式是把snmp++的cpp源文件和头文件都加到工程里,再编译.我觉得添加所有头文件到工程里 ...

  8. xcode6编译cocos2dx项目出现Undefined symbols _fwrite$UNIX2003

    当xcode6编译cocos2dx的时候会出现Undefined symbols _fwrite$UNIX2003 这个问题.google了一篇文章:http://stackoverflow.com/ ...

  9. Mac上利用Eclipse编译Cocos2d-x

    目前使用较多的Cocos2d-x开发平台是XCode,应该是由于大部分Cocos2d-x开发者都是iOS开发出生.但是当我们将XCode开发的Cocos2d-x工程发布Android版本时,每次都需要 ...

  10. vs2012编译在win7 32位电脑和win xp电脑上运行的win32程序遇到的问题记录

    一.win7 32位电脑: vs2012编译的64位程序是没有问题的.但编译的32位程序在别的电脑(虚拟机模拟)出错: 感觉很无语,vs这么牛逼的东西,在设计时候都不考虑这些吗? 在自己电脑C:\Wi ...

随机推荐

  1. 所有文章的测试Demo

    Mqtt C++ Client 测试Demo https://pan.baidu.com/s/1Ue00GYv2SUd8aTquhvOW1w

  2. thinkphp导出csv文件,用表格输出excel

    1.thinkphp导出csv文件 导出csv文件可能就那几行代码,今天有个问题困扰我好久,就是导出之后出现一些html代码,这个不应该,view里面是空的,controller中最后也没有$this ...

  3. 微信JSSDK与录音相关的坑

    微信JSSDK与录音相关的坑 最近一直在做微信JSSDK与录音相关的功能开发, 遇到了各种奇尺大坑, 时不时冷不丁地被坑一道, 让我时常想嘶吼: "微信JSSDK就是个大腊鸡!!!!!!!! ...

  4. 第2次作业——APP的案例分析

    APP的案例分析 网易有道词典APP,使用这个软件有三年之久.唯独最爱的一点就是我每天都能听到不一样的英文歌看到创作歌手的来历,当然偶尔也会有其他国家的歌.起初使用这个软件的目的是用来查单词,每天积累 ...

  5. jQuery复制table header到表格的最下面

    为了让table具有更好的可读性,我们可以将表格的header信息克隆一份到表格的底部,这种特效通过JQuery就很容易实现: 1 2 3 4 5 var $tfoot = $(''); $($('t ...

  6. 清除SQL server 记住的用户名和密码

    公司更换电脑,清除SQL server 记住的用户名和密码 请按照上图中的位置找到相应的文件SqlStudio.bin,然后把它删除,请放一百个心,这个文件会自动生成的. 需要注意的是,在删除之前一定 ...

  7. ajax跨域调用webservice例子

    [WebMethod(Description = "这是一个描述")] public void GetTIM() { try { SqlDataAdapter da = new S ...

  8. 20145203 盖泽双《Java程序设计》第一周的学习总结

    20145203 盖泽双<Java程序设计>第一周学习总结 教材学习内容总结 第一章 1.Java是一门完全面向对象,安全可靠,与平台无关的编程语言. 2.Java现由Java SE.Ja ...

  9. Docker实战(十)之分布式处理与大数据平台

    分布式系统和大数据处理平台是目前业界关注的热门技术. 1.RabbitMQ RabbitMQ是一个支持AMQP的开源消息队列实现,由Erlang编写,因以高性能.高可用以及可伸缩性出名.它支持多种客户 ...

  10. Redis(一)源码安装

    redis 是一款开源的,基于 BSD 许可的,高级键值 (key-value) 缓存 (cache) 和存储 (store) 系统.性能极高,并且支持丰富的数据结构.下面将介绍在ubuntu 14. ...