2009-12-10 3 views
1

짧은 이야기를 요약하면 C++ SDK (openfeint)를 사용하기 전까지 프로젝트 (iPhone 앱)가 정상적으로 작동하고있었습니다. 시뮬레이터에서 테스트 할 때까지 디바이스에서 tesitng로 전환 할 때까지 C+++ Openfeint를 포함하여 모든 것이 잘 작동했습니다.Openfeint가이 문제를 일으켰습니다. 형식이없는 'myClass'선언의 ISO C++ 금지.

이제는 아무 것도 컴파일되지 않고 단지 200 개 미만의 오류 만 발생합니다. 모든 것이 통제에서 벗어나 모든 장치에서 컴파일되지 않습니다. 내가 말했듯이 모든 것이 완벽하게 작동하고 한 줄의 코드를 변경하지 않고 단순히 Active SDK를 전환했습니다.

그래서 처음부터 시작하겠습니다. 첫 번째 오류는

// 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 

내가 그렇게 나와 함께 곰이 새로운 해요 ...

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

이 오류를 클릭하면 다른 클래스의 헤더 파일에 저를 걸립니다 ...입니다. *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 

... 헤더입니다. 이전에 괜찮 았던 모든 작업이 있었고 간단하게 파악할 수 없었습니다. 나는 인터넷 검색을 해왔고 작물 업은 "Forward Declaration"이라는 용어이다. 그러나 그것은 나에게 아무런 의미가 없으며 구조체에 관한 이야기를 찾았다.

나는 실수가 단순한 한 줄 오타 나 뭔가를 범하는 것이 아니라 다른 많은 일을 잘못하고 있음을 알 수 있다고 생각한다. 누구든지 여기서 laymans 용어로 설명 할 수 있습니까?

+0

이 코드는 목표 C 것으로 보인다 - 그것은 확실히 C 아니다 ++. –

+0

객관적인 C이지만 openfeint는 C++이므로 파일 확장명을 .mm으로 변경해야했습니다. – gargantuan

+0

장치를 컴파일하기 위해 다시 변경하면 작동합니까? 귀하의 빌드 설정에 대한 뭔가가 BrickControlLayer 또는 brickSprite를 포함시키지 않는지 궁금합니다. OpenFeint를 추가하기 바로 전에 시뮬레이터를 올바르게 컴파일 했습니까? –

답변

1

여기 Jason은 OpenFeint에서. 문제를 보여주는 openfeint dot com에서 devsupport로 코드 샘플을 보내려는 경우 살펴볼 것입니다. .MM 파일 대신 .CPP에서 헤더 파일을 포함하는 것 같습니다.

iPhone 대상 SDK를 변경 한 경우 모든 SDK 및 구성 (릴리스, 디버그)에 대해 컴파일러 옵션을 설정했을 때이를 확인하십시오.

컴파일러가 Objective-C 선언에 있음을 인식하지 못하거나 BrickControlLayer에 대한 헤더 선언을 찾을 수 없습니다. 순환 포함 일 수 있습니까? (사용 한 번 가드를 포함하거나의 #pragma합니까?)하는 데 도움이

희망, 는 - 제이슨 유자 - 설립자 & CEO, 오로라 견제는

+0

wowzer, 고객 지원에 대해 이야기하십시오! 공평하게 말하면 ObjC, C++ 및 iPhone 개발자에 대한 나의 미숙함 때문입니다. 나는 신선한 프로젝트를 만들었고 모든 것이 제대로 작동하는지 확인하기 위해 단계적으로 백업을 만들었습니다. 또한 개발 초기 단계부터 몇 가지를 포함하여 모든 헤더 파일을 정리했습니다. 필자는 Openfeint (그것은 보스가 멋지다)를 다시 통합했으며, 장치와 시뮬레이터에서 잘 컴파일됩니다. 나는 그것이 내 자신의 무지로 인한 원형 포함이라고 생각한다. 하지만 이제는 월요일에 제출하기 위해 다시 돌아 왔습니다. – gargantuan

+0

아, 그런데 Stackoverflow에 오신 것을 환영합니다. 그것은 또한 대장입니다. – gargantuan

1

오류가 약 BrickController이 아니므로 BrickControlLayer이 아니므로 컴파일러가 실제로 불만을 표시하는 행을 게시하지 않았다고 생각합니다.

나는 당신이 근본적인 문제는 그것이 오류 메시지에서 ISO C++ 컴파일러라고 생각하는 것으로서 Objective C로 보이는 파일을 컴파일하려고한다는 것입니다.

+0

죄송합니다. 손으로 오류를 입력해야했습니다 (XCode 오류를 복사하는 방법이 있습니까?) 문제는 BrickControlLayer입니다. 나는 그 질문에 그것을 수정했다. – gargantuan

+0

두 번째 단락이 여전히 적용됩니다. Objective C 또는 하이브리드 Objective C++를 이해하는 컴파일러를 사용해야합니다. –

+0

Openfeint 웹 사이트의 지침에 따라 관련 파일을 .mm으로 변경하고 Openfeint 연습에서 지정된 것 중에서 "기타 링크 플래그 : -ObjC"를 추가했습니다. 그러나, 나는 그것이 잘 작동 할 수있는 방법을 이해하지 못한다. – gargantuan

0

Integrating the OpenFeint SDK 페이지에 나열된 모든 단계를 수행 했습니까?

또는 OpenFeint와 인터페이스하는 Objective-C++ 하나의 클래스를 만들 수도 있습니다. 그러면 모든 Objective-C 클래스는 동일하게 유지되지만 OpenFeint 핸들러 클래스를 호출 할 수 있습니다.

+0

예, 나는 모든 단계를 정확히 따라갔습니다. 그것이 내가 처음부터 모든 것을 작동시키는 방법입니다. 즉, 당신의 솔루션이 갈 길이라고 생각합니다. 그것은 openfeint를 호출하지 않는 클래스에서 오류를 발생시키는 것으로 보이지만, Openfeint를 초기화해야하는 AppDelegate 중 하나 인 파일에 포함됩니다. – gargantuan

+0

깨끗하고 재건을 시도 했습니까? –

0

OpenFeint를 포함하거나 가져 오는 모든 파일의 이름을 .mm으로 변경 했습니까? 또한 빌드 설정에서 '엄지로 컴파일'을 해제 해 보았습니까?

+0

예, 그리고 '엄지를 위해 컴파일'을 시도했습니다. 차이 없음. – gargantuan