1

簡単に言うと、C++ SDK (openfeint) を使い始めるまで、私のプロジェクト (iPhone アプリ) はすべて正常に動作していました。デバイスでのテストからシミュレーターでのテストに切り替えるまで、C++++ Openfeint を含め、すべてが正常に機能していました。

今では何もコンパイルされず、200未満のエラーが発生しています。それはすべて制御不能になり、どのデバイスでもコンパイルできません。前述したように、すべてが完全に機能していました。コードを 1 行も変更していません。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

私はそれを何度も繰り返してきました。以前はすべて正常に機能していましたが、単に理解できません。私はそれをグーグルで検索してきましたが、「前方宣言」という用語しか出てきませんでしたが、それは私には何の意味もありません。私が見つけたすべての情報は、構造体について語っています。

エラーは、単純な1行のタイプミスなどではなく、他の多くのことを間違っていることを示していると思います。ここで何が起こっているのか、誰でも素人の言葉で説明できますか?

4

4 に答える 4

1

あなたのエラーはそうではBrickControllerないBrickControlLayerので、コンパイラが実際に不平を言っている行を投稿したとは思わない。

そうは言っても、あなたの根本的な問題は、Objective Cのように見えるファイルを、エラーメッセージからISOC++コンパイラであると思われるものでコンパイルしようとしていることだと思います。

于 2009-12-10T19:39:32.950 に答える
1

OpenFeint の Jason です。問題を示すコード サンプルを openfeint dot com の devsupport に送信したい場合は、問題を確認します。.MM ファイルではなく .CPP からヘッダー ファイルをインクルードしているようです。

iPhone ターゲット SDK を変更しただけの場合は、コンパイラ オプションをセットアップするときに、すべての SDK とビルド構成 (リリース、デバッグ) に対して行ったことを再確認してください。

あなたが得ているエラーは、Objective-C 宣言にいることをコンパイラが認識しないか、BrickControlLayer のヘッダー宣言が見つからないように聞こえます。循環インクルードでしょうか?(インクルード ガードまたは #pragma once を使用しますか?)

お役に立てば幸いです - Jason Citron - Aurora Feint の創設者兼 CEO

于 2009-12-10T22:50:14.347 に答える
0

OpenFeintを含むまたはインポートするすべてのファイルの名前を.mmに変更しましたか?また、ビルド設定で「親指のためにコンパイル」をオフ(またはオン)にしてみましたか?

于 2009-12-10T19:59:59.460 に答える
0

OpenFeint SDKの統合ページにリストされているすべての手順を実行しましたか?

あるいは、OpenFeintとインターフェースするObjective-C++である単一のクラスを作成することもできます。そうすれば、すべてのObjective-Cクラスは同じままで、OpenFeintハンドラークラスを呼び出すことができます。

于 2009-12-10T19:53:40.407 に答える