这几天想玩一下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. SpringBoot @AutoWired Null

    在调用工具类时,若工具类中含有@Autowired注解,这此工具类对象必须同样使用@Autowired注解,否则工具类中的Spring注入的对象都为空值,这里的HadoopTest就是这样 比如MyC ...

  2. September 21st 2017 Week 38th Thursday

    What fire does not destroy, it hardens. 烈火摧毁不了的东西,只会变得更坚固. The true gold can stand the test of fire, ...

  3. Mina使用总结(二)Handler

    Handler的基本作用,处理接收到的客户端信息 一个简单的Handler实现如下: package com.bypay.mina.handler; import java.util.Date; im ...

  4. 【转】Android SDK,ADT,API 版本的对应关系

    写对应关系之前,先了解一下几个名字的含义. 一. Android ADT: 按照官方网站的开发介绍:Android Development Tools (ADT) is a plugin for th ...

  5. Jsp实现在线作业提交系统

    Jsp实现在线作业提交系统 作为 Computer Science 的学生,凌晨四点之前睡都应该感到羞耻. 项目托管地址:https://github.com/four-in-the-morning/ ...

  6. Jenkins + GitLab 通过 Webhook 自动触发构建爬坑记录

    前言   在局域网搭建了一个Jenkins服务,用于自动构建和发布,在调通了构建程序之后,想使用内网的GitLab的Webhook功能触发代码推送事件,然后进行自动构建.后来发现在GitLab上做测试 ...

  7. 1553: Good subsequence (很奇妙的set模拟题,也可以直接暴力)

    1553: Good subsequence Submit Page    Summary    Time Limit: 2 Sec     Memory Limit: 256 Mb     Subm ...

  8. CSDN博客清理缓存

    CSDN博客清理缓存 清着清着 訪问量少了将近2w 积分少了几百 唉 你这是要闹什么呀 说9点结束 如今都几点了

  9. CSS3 Gradient渐变效果

    最近看到一遍关于渐变的文章,感觉很好,只是收藏感觉太可惜了,就转载了,好好学习! CSS3 Gradient分为linear-gradient(线性渐变)和radial-gradient(径向渐变). ...

  10. ABAP术语-Authorization Profile

    Authorization Profile 原文:http://www.cnblogs.com/qiangsheng/archive/2007/12/21/1008992.html Element o ...