【问题标题】:Lexical or preprocessor error: file not found using box2d & cocos2d词法或预处理器错误:使用 box2d 和 cocos2d 找不到文件
【发布时间】:2012-12-18 07:57:31
【问题描述】:

我在构建项目时遇到了这个奇怪的问题。问题如下:

我和我的朋友正在做一个项目,我们使用完全相同的 xcode、cocos2d 和 box2d 版本。 他的项目编译(构建)很好,而我的项目在我这样做时会出现此错误: 未找到 cassert 文件。

我复制了他的 xcode.project,但没有任何问题。

我希望这段代码能更好地总结我想说的:

GameLayer.h
#import bla bla //the usual required files
@class myOwnClass1;
@class myOwnClass2;

myOwnClass1 *test1;
myOwnClass2 *test2;

现在我想使用#importmyOwnClass1.hmyOwnClass2.h 中包含GameLayer.h,但这会给我错误! 如果我做了@class GameLayer; 完全没有问题。

事情是在我朋友的项目中,他正在做#import 没有错误,这非常奇怪(至少对我来说)

建议?

附:我知道将.m 更改为.mm 可以解决它,但是在我朋友的项目中,他再次使用.m

【问题讨论】:

  • 您能否粘贴您收到的确切错误消息文本?并指定标记哪一行?
  • 确切的错误消息是:lexical or preprocessor error: file not found 并显示b2dsettings.h 中包含的#include <cassert> 代码行。如果这对你来说还不够,我回家后会发布一些代码(macbook @home)

标签: objective-c xcode cocos2d-iphone box2d-iphone


【解决方案1】:

我猜你的项目和你朋友的项目之间的编译器设置不匹配。

简而言之:cassert是一个C++头文件;你肯定需要一个 C++ 编译器来编译它。

现在,我猜在你朋友的项目中,GameLayer.m 文件被标记为 C++ 文件,尽管它有一个 .m 扩展名。

要验证这一点,请在文本编辑器中打开您的项目(和您朋友的)project.pbxproj 文件并查找 GameLayer.m 文件。你会得到这样的条目:

    347F5D94158BA4840058BC21 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };

如您所见,lastKnownFileType 键表示 sourcecode.c.objc:这标识了一个 Objective-C 文件。如果您看到sourcecode.cpp.objcpp,则表示目标c++。

希望这有助于澄清它。

【讨论】:

  • 我完成工作后一定会检查一下。当我与他核实时,他告诉我他没有修改任何内容或操纵任何设置,无论如何我无法确定,除非我自己检查。谢谢@sergio
  • 否定的,我们都拥有相同的D87300F41679D0E900CF1744 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "&lt;group&gt;"; }; 和我的635CEB9D167FAC22005BB58B /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "&lt;group&gt;"; };
  • 我可以结束这个问题吗?我们从头开始做了另一个项目,它正在工作,不知道为什么旧项目不会。所以我想我们可以结束这个问题。
  • 或者您可以添加您的发现(即修复程序正在创建一个新项目)作为其他人进入相同项目的可接受答案...
【解决方案2】:

由于某种原因,事实证明从头开始创建一个新项目可以解决问题,除非其他人有其他意见,否则我暂时将其标记为正确答案。

【讨论】:

    【解决方案3】:

    这是我解决问题的方法。清理和重新创建项目对我来说似乎不是一个好主意。

    网上有几个关于这个问题的答案,但每个答案都没有帮助我解决问题。一个在 SO 上

    cassert file not found but i use Box2d template另一个在cocos2d-iphone论坛,

    http://www.cocos2d-iphone.org/forums/topic/cannot-include-box2d-cassert-file-not-found-despite-every-file-being-mm/

    结合这两个建议对我有用 -

    1. 将您的所有文件(不是 cocos2d 或 box2d 文件,只是您的项目文件)从 .m 重命名为 .mm
    2. 确保在每个文件的右侧窗格中,“类型”选项设置为“默认 - 目标 C++ 源”

    对我来说还有另一个问题,对你来说可能不是问题,我在 CCLabelTTF 中使用了以下签名

    CCLabelTTF *title = [CCLabelTTF labelWithString:@"Hello" dimensions:CGSizeMake(720.0f, 880.0f) alignment:UITextAlignmentLeft fontName:@"Arial" fontSize:34];
    

    这已被弃用并导致整个地方的错误。我现在正在使用以下稍作修改的版本并修复了错误 -

    CCLabelTTF *title = [CCLabelTTF labelWithString:@"Hello" dimensions:CGSizeMake(720.0f, 880.0f) hAlignment:kCCTextAlignmentRight fontName:@"Arial" fontSize:34];
    

    我最近关于此修复的文章可以在 - http://indiangamer.com/how-i-fixed-the-cocos2d-box2d-include-file-not-found-error/ 找到

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-30
      • 1970-01-01
      • 2018-02-16
      • 2013-12-02
      • 1970-01-01
      • 1970-01-01
      • 2012-06-11
      相关资源
      最近更新 更多