2015-04-30 3 views
5

Я пытаюсь интегрировать ОВР в cocos2d-х проект, как описано в: http://becomingindiedev.blogspot.com.es/2015/02/integrating-iad-in-cocos2d-x-v3x.htmlКак разрешить «доступ членов в неполный тип» ошибка

AdBanner.h

#import <Foundation/Foundation.h> 
#import <iAd/iAd.h> 
@class RootViewController; 
@interface AdBanner : NSObject<ADBannerViewDelegate> 
{ 
    UIWindow* window; 
    RootViewController* rootViewController; 
    ADBannerView* adBannerView; 
    bool adBannerViewIsVisible; 
} 

AdBanner.mm

@implementation AdBanner 

-(id)init 
{ 
    if(self=[super init]) 
    { 
    adBannerViewIsVisible = YES; 
    rootViewController = 
     (RootViewController*) [[[UIApplication sharedApplication] keyWindow] rootViewController]; 
    window = [[UIApplication sharedApplication] keyWindow]; 
    [self createAdBannerView]; 
    } 
    return self; 
} 

-(void)layoutAnimated:(BOOL)animated 
{ 
    CGRect bannerFrame = adBannerView.frame; 
    //Has the banner an advestiment? 
    if (adBannerView.bannerLoaded && adBannerViewIsVisible) 
    { 
     NSLog(@"Banner has advertisement"); 
     bannerFrame.origin.y = window.bounds.size.height - bannerFrame.size.height; 
    } else 
    { 
     NSLog(@"Banner has NO advertisement"); 
     //if no advertisement loaded, move it offscreen 
     bannerFrame.origin.y = window.bounds.size.height; 
    } 
    [UIView animateWithDuration:animated ? 0.25 : 0.0 animations:^{ 
     [rootViewController.view layoutIfNeeded]; //Member access into incomplete type "RootViewController" 
     adBannerView.frame = bannerFrame; 
    }]; 
} 
@end 

строка в нижней части в AdBanner.mm дает ошибку:

[rootViewController.view layoutIfNeeded]; //Member access into incomplete type "RootViewController" 

Как это разрешить?

+0

'rootViewController' выглядит как указатель, попробуйте' -> '? – user3528438

+0

Это код цели-C++. –

+0

Он был помечен C++, прежде чем vsoftco отредактировал его ..... – user3528438

ответ

9

Вы объявили RootViewController как объявление прямого класса в вашем .h файле, используя директиву @Class, но вы не импортировали RootViewController.h в файл ADBanner.mm.

Это означает, что компилятор знает, что существует некоторый класс RootViewController, но он ничего не знает об этом - его суперкласс, методы или свойства. Таким образом, он не может подтвердить, что на самом деле имеет метод layoutIfNeeded.

Добавление #import "RootViewController.h" наверху ADBanner.mm предоставит компилятору необходимую ему информацию и устранит ошибку.