1

长话短说,在我开始使用 C++ sdk (openfeint) 之前,我的项目(一个 iPhone 应用程序)一切正常。一切工作正常,包括 C++ Openfeint 的东西,直到我从设备上的测试切换到模拟器中的测试。

现在它不会编译任何东西,我得到了不到 200 个错误。这一切都失去了控制,无法在任何设备上编译。正如我所说,一切都运行良好,我没有更改任何一行代码,我只是切换了 Active SDK。

所以我将从头开始。第一个错误是...

Error 1: ISO C++ forbids of declaration 'BrickControlLayer' with no type

单击此错误会将我带到另一个类的头文件...

//  GameScene.h

#import <Foundation/Foundation.h>
#import "cocos2d.h"
#import "brickSprite.h"
#import "BrickControlLayer.h"
#import "GameState.h"
#import "ScoreController.h"
#import "FeedbackLayer.h"
#import "TimeBar.h"

@interface GameScene : Layer {

    GameState *gameState;
    ScoreController *scoreController;
    CocosNode *spriteHolder;
    brickSprite *targetBrick;

    // Heres the line it takes me too <<<<<<<<<<<<<<<<<
    BrickControlLayer *controls;

    NSInteger difficulty;
    NSMutableArray *pointsLookupArray;
    BitmapFontAtlas *scoreLabel;
    FeedbackLayer *feedback;
    NSDate *startTime;
    TimeBar *timeProgress;
    int rowScanCount, foundRows;
}

// methods here....

@end

我是新手,所以请耐心等待。我很困惑,因为我清楚地说明那*controls是' BrickControlLayer'类型。所以我认为“BrickControlLayer”本身有问题。

这是标题...

//  BrickControlLayer.h

#import <Foundation/Foundation.h>
#import "cocos2d.h"
#import "brickSprite.h"
#import "HighScores.h"

@interface BrickControlLayer : Layer{

    CocosNode *spriteHolder;
    CGPoint touchedStartPoint, moveFromPoint;
    brickSprite *touchedBrick;
    BOOL editorMode;
    int movecount;

    // Control buttons
    AtlasSpriteManager *buttonManager;
    AtlasSprite *rotLeft, *rotRight, *newBrick, *deleteBrick, *makeTarget, *save, *run;

    BOOL tapToContinue;

}

@property (retain, readwrite) CocosNode *spriteHolder;
@property (retain, readwrite) brickSprite *touchedBrick;

-(void)showEditorControls;
-(void)selectBrickAtLocation:(CGPoint)location;
-(void)hideEditorControls;
-(void)deactivate;

@end

我已经克服了它。以前一切正常,我根本想不通。我一直在谷歌上搜索它,唯一出现的是“前向声明”一词,但这对我来说没有任何意义,我发现的所有信息都在谈论结构。

我怀疑这些错误更多地表明我做错了很多其他事情,而不是犯了一个简单的单行错字之类的东西。谁能用通俗的语言解释这里发生了什么?

4

4 回答 4

1

您的错误BrickController不是BrickControlLayer,所以我认为您没有发布编译器实际抱怨的行。

话虽如此,我认为您的根本问题是您正在尝试编译看起来是 Objective C 的文件,而从它的错误消息来看,它认为它是一个 ISO C++ 编译器。

于 2009-12-10T19:39:32.950 回答
1

Jason 来自 OpenFeint。如果您想将演示问题的代码示例发送给 openfeint dot com 的 devsupport,我们将为您查看。听起来您可能包含来自 .CPP 而不是 .MM 文件的头文件。

如果您所做的只是更改 iPhone 目标 SDK,请仔细检查您在设置编译器选项时是否对所有 SDK 和构建配置(发布、调试)进行了更改。

您收到的错误听起来像是编译器无法识别您在 Objective-C 声明中,或者找不到 BrickControlLayer 的标头声明。可能是一个循环包括?(您是否使用过一次包含警卫或#pragma?)

希望对您有所帮助 - Jason Citron - Aurora Feint 创始人兼首席执行官

于 2009-12-10T22:50:14.347 回答
0

您是否按照集成 OpenFeint SDK页面上列出的所有步骤进行操作?

或者,您可以创建一个与 OpenFeint 接口的 Objective-C++ 类。然后你所有的 Objective-C 类可以保持不变,但调用 OpenFeint 处理程序类。

于 2009-12-10T19:53:40.407 回答
0

您是否已将所有包含或导入 OpenFeint 的文件重命名为 .mm ?您是否还尝试在构建设置中关闭(或打开)“为拇指编译”?

于 2009-12-10T19:59:59.460 回答