0

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

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

我拿了一份他的 xcode.project 的副本,但没有任何问题。

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

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

myOwnClass1 *test1;
myOwnClass2 *test2;

现在我想GameLayer.h在其中包含myOwnClass1.hmyOwnClass2.h使用#import,但它会给我错误!如果我没有@class GameLayer;任何问题。

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

建议?

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

4

3 回答 3

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++。

希望这有助于澄清它。

于 2012-12-18T09:24:29.427 回答
0

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

于 2012-12-24T14:39:58.730 回答
0

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

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

cassert 文件未找到,但我使用 Box2d 模板,另一个在 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++ 源”</li>

对我来说还有另一个问题,对你来说可能不是问题,我正在使用以下签名为 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/

于 2013-12-18T11:55:15.107 回答