Variable length of non-POD element type 'b2Vec2'!!怎么会报出这个错误呢?
真有点儿搞不懂了,刚进入ios开发的时候用的是一个朋友的mac笔记本
他的系统是雪豹的,在雪豹的XCode下面我记得是一点儿问题都没有的,警告也就是某某变量声明过后未被使用
蛋疼了,再看代码,操了,标准的c、c++写法啊...
在栈上定义一个b2Vec2数组也不行,不兴这样的吧?!如下图所示:
自打用上狮子以来,这个问题烦扰我好几次了,虽然项目能够正常编译通过并执行
但我就是觉得不爽,明明没错的东西还给报错,这不等于混淆视听么!!
前几天观摩别人的项目的时候不能正常运行,我在项目文件中重新设置了一下项目的编译器,竟然达到了我的目的~
想到这儿反正我也没有别的办法了,不如死马当做活马医,于是也改了一下编译器,
将编译器由 "LLVM GCC 4.2" 改成了 "GCC 4.2",没想到竟然也奏效了
下面是更改过之后重新运行时的IDE 界面
混淆试听的鸡肋错误提示被赶走了,仿佛大热天里啃上一根老冰棒,爽!
当然,这只是表面现象,其实还是有必要探讨一下为什么会出现这样的错误的:
如第二张图中所示,其实xcode的编译器总共有3种:
1.Apple LLVM compiler 2.1
2.GCC 4.2
3.LLVM GCC 4.2
贴上一些在百度百科上面找到的关于LLVM的资料:
概述
可以作为多种语言编译器的后台来使用。能够进行程序语言的编译期优化、链接优化、在线编译优化、代码生成。
发展历程
2005年Apple雇了Chris Lattner,LLVM也相当于成了Apple的官方支持的编译器。
Apple已经将它用在OpenCL的流水线优化,Xcode已经能使用llvm-gcc编译代码。
优点
1。现代化的设计
LLVM的设计是高度模块化的,使得其代码更为清晰和便于排查问题所在。
2。语言无关的中间代码
一方面,这使得透过LLVM能够将不同的语言相互连结起来;也使得LLVM能够紧密地与IDE交互和集成。
另一方面,发布中间代码而非目标代码能够在目标系统上更好地发挥其潜能而又不伤害可调试性
(i.e. 在目标系统上针对本机的硬件环境产生目标代码,但又能够直接通过中间代码来进行行级调试)
3。作为工具和函数库
使用LLVM提供的工具可以比较容易地实现新的编程语言的优化编译器或VM,或为现有的编程语言引入一些更好的优化/调试特性。
这么多年来一直受到不停的完善!!为很多个人,公司所使用,貌似微软,apple就在其内。。
以下是我的个人看法:
1。显而易见,gcc 和 llvm 是两个不同体系的编译器
2。苹果以前用的是 gcc,但是苹果现在有钱了,非常有钱!有钱了之后可能就砸钱自己研究开发新一代的编译器,如LLVM
3。由于苹果的老底子是由gcc打起来的,但是苹果现在又想摆脱gcc的掌控,而现在正是非常时期,所以就出现了一个过渡性的编译器,如 LLVM GCC 4.2,当然这只是我的猜测。。
4。因为gcc的广泛流传,所以不少项目都是在gcc的环境下完成的,现在狮子里面的xcode突然间要用LLVM GCC 4.2这个过渡性的编译器了,自然会暴露出一些问题,如上面所报出来的错误!!也正因为不是纯粹意义上的LLVM编译器,所以错误虽然报出来了,但还是不影响项目的成功编译执行!!但如果你将编译器修改为 Apple LLVM compiler 2.1的话,你会发现,这次真的是大条了,同样是报出了错误,但是此时已经不能够成功编译执行了!!
5。也许某一天xcode的编译器标准配置会过渡为 Apple LLVM compiler x.x,那时候,哈哈,满地的错误了~
以上仅为本人根据浅薄闻道胡乱猜测,诚恳希望有真正了解此种缘由的人来指教,欢迎各种拍砖,拍各种砖!!^_^