2015-11-15 31 views
3

我正在研究一個應用程序源代碼,該代碼由於某種原因禁用了In App Purchase代碼(註釋掉)。遊戲是在Cocos 2dx中建立的。In App在iOS遊戲中購買Cocos2Dx「使用未聲明的標識符」

現在,我對C++一無所知,但我研究過試圖找到對此的答案,並且我被卡住了。

我得到一個編譯器錯誤:

Undefined symbols for architecture arm64: 
    "BLACKJACK::BlackJackSetting::submitScore(int)", referenced from: 
    MainMenuLayer::onLeaderBoard(cocos2d::CCObject*) in MainMenuLayer.o 
    "BLACKJACK::BlackJackSetting::showLeaderboard()", referenced from: 
    MainMenuLayer::onLeaderBoard(cocos2d::CCObject*) in MainMenuLayer.o 
    "BLACKJACK::BlackJackSetting::isAvailable()", referenced from: 
    MainMenuLayer::onLeaderBoard(cocos2d::CCObject*) in MainMenuLayer.o 
    "_WebPDecode", referenced from: 
    cocos2d::CCImage::_initWithWebpData(void*, int) in CCImageCommonWebp.o 
    "BLACKJACK::BlackJackSetting::isCoins1000()", referenced from: 
    ShopLayer::onClickPopBuy() in ShopLayer.o 
    "BLACKJACK::BlackJackSetting::dispChartboostBanner()", referenced from: 
    MainMenuLayer::init() in MainMenuLayer.o 
    "BLACKJACK::BlackJackSetting::shared()", referenced from: 
    ShopLayer::onClickPopBuy() in ShopLayer.o 
    MainMenuLayer::init() in MainMenuLayer.o 
    MainMenuLayer::onLeaderBoard(cocos2d::CCObject*) in MainMenuLayer.o 

這裏是整個代碼塊:

void ShopLayer::onClickPopBuy() { 

    if (g_nProgressBuy != -1) { 
    itemPopBuy->setEnabled(false); 
    AndroidSocial::shared()->buyFeatureB(m_curPopIdx); 
    g_nProgressBuy = -1; 
    this->schedule(schedule_selector(ShopLayer::onProcessBuy), 0.5f); 
    } 

    if (spPop1->isVisible()) { 
    // Compiler Error: use of undeclared identifier 'BLACKJACK' 
    BLACKJACK::BlackJackSetting* bj = BLACKJACK::BlackJackSetting::shared(); 
     if (bj->isPaidVersion()) { 
     bj->processIAP("com.prismstudios.BlackjackPaid.coin1000"); 
     } 
     else 
     { 
     bj->processIAP("com.prismstudios.Blackjackfree.coin1000"); 
     } 

     GameSetting* gameSetting = GameSetting::shared(); 
     gameSetting->getCoins(); 

     if (bj->isCoins1000()) { 
     g_nYourCoin += 1000; 
     } 

     gameSetting->saveCoins(); 
    } 
    } 

更新 - BlackJackSetting.m文件:

static void static_setEnable(bool enable){ 
    NSLog(@"enable GC %d", enable); 

    BLACKJACK::BlackJackSetting *gc = BLACKJACK::BlackJackSetting::shared(); 
    gc->isEnabled = enable; 

} 

namespace BLACKJACK 
{ 
    static BlackJackSetting* bjSetting; 
    BlackJackSetting::BlackJackSetting() 
{ 

} 
    BlackJackSetting::~BlackJackSetting() 
{ 

} 

    BlackJackSetting* BlackJackSetting::shared() 
{ 
    if (!bjSetting) 
    { 
     bjSetting = new BlackJackSetting(); 
    } 
    return bjSetting; 
} 

    void BlackJackSetting::alertDialog() 
{ 
    AppController* app = (AppController*)[[UIApplication sharedApplication] delegate]; 
    [app alertDialog]; 
} 

    void BlackJackSetting::dispChartboostBanner() 
{ 
    AppController* app = (AppController*)[[UIApplication sharedApplication] delegate]; 
    [app dispChartboostBanner]; 
} 

    void BlackJackSetting::dispChartboostMoreGames() 
{ 
    AppController* app = (AppController*)[[UIApplication sharedApplication] delegate]; 
    [app dispChartboostMoreGame]; 
} 

    void BlackJackSetting::dispAppLovin() 
{ 
    AppController* app = (AppController*)[[UIApplication sharedApplication] delegate]; 
    [app dispAppLovin]; 
} 

    bool BlackJackSetting::isPaidVersion() 
{ 
    AppController* app = (AppController*)[[UIApplication sharedApplication] delegate]; 
    return [app isPaidVersion]; 
} 

    void BlackJackSetting::showPlayHavenBanner(int nType) 
{ 
    AppController* app = (AppController*)[[UIApplication sharedApplication] delegate]; 
    [app showPlayHavenBanner:nType]; 
} 


    void BlackJackSetting::onRestore() 
{ 
    AppController* app = (AppController*)[[UIApplication sharedApplication] delegate]; 
    [app onRestore]; 
} 

    void BlackJackSetting::processIAP(const char* sz) 
{ 
    AppController* app = (AppController*)[[UIApplication sharedApplication] delegate]; 
    [app processIAP:[NSString stringWithUTF8String:sz]]; 
} 

    bool BlackJackSetting::isCoins1000() 
{ 
    AppController* app = (AppController*)[[UIApplication sharedApplication] delegate]; 
    return [app isCoins1000]; 
} 

    bool BlackJackSetting::isCoins2500() 
{ 
    AppController* app = (AppController*)[[UIApplication sharedApplication] delegate]; 
    return [app isCoins2500]; 
} 

    bool BlackJackSetting::isCoins6000() 
{ 
    AppController* app = (AppController*)[[UIApplication sharedApplication] delegate]; 
    return [app isCoins6000]; 
} 

    bool BlackJackSetting::isCoins14000() 
{ 
    AppController* app = (AppController*)[[UIApplication sharedApplication] delegate]; 
    return [app isCoins14000]; 
} 

    bool BlackJackSetting::isCoins30000() 
{ 
    AppController* app = (AppController*)[[UIApplication sharedApplication] delegate]; 
    return [app isCoins30000]; 
} 


    bool BlackJackSetting::isAvailable(){ 
    // Check for presence of GKLocalPlayer API. 
    Class gcClass = (NSClassFromString(@"GKLocalPlayer")); 

    // The device must be running running iOS 4.1 or later. 
    NSString *reqSysVer = @"4.1"; 
    NSString *currSysVer = [[UIDevice currentDevice] systemVersion]; 
    BOOL osVersionSupported = ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending); 

    return (gcClass && osVersionSupported); 

    return YES; 
} 

    void BlackJackSetting::playerLogin(){ 
    [[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:^(NSError *error) { 
     if (error == nil) 
     { 
      static_setEnable(true); 

      NSLog(@" Authenticate local player complete"); 

     } 
     else 
     { 
      static_setEnable(false); 
      NSLog(@"Authenticate local player Error: %@", [error description]); 
     } 
    }]; 
    } 


void BlackJackSetting::showLeaderboard(){ 
    AppController* app = (AppController*)[[UIApplication sharedApplication] delegate]; 
    [app showLeaderboard]; 

} 

void BlackJackSetting::submitScore(int score){ 

    AppController* app = (AppController*)[[UIApplication sharedApplication] delegate]; 

    NSString *category [email protected]"gr.com.goldcion.blackjack.leaderboard"; 
    if ([app isPaidVersion]) 
    { 
     category [email protected]"com.goldcion.blackjack.leaderboard"; 
    } 
    [NSBundle mainBundle]; 


    NSLog(@"Submitting score for identifier: %@", category); 
    GKScore *scoreReporter = [[[GKScore alloc] initWithCategory:category] autorelease]; 
    scoreReporter.value = score; 

    [scoreReporter reportScoreWithCompletionHandler:^(NSError *error) { 
     if (error != nil) 
     { 
      NSLog(@"Submitting score error: %@", [error description]); 
     } 
     else { 
      NSLog(@"Submitting score success"); 
     } 

    }]; 
    } 
    } 
+0

你能顯示你的BLACKJACK類或名字空間的代碼嗎? – Jain

+0

用BlackJackSetting.m更新了問題 – Paul

+0

爲什麼你需要一個名稱空間來保存類的靜態變量? – Jain

回答

0

它看起來像這樣的代碼是從其他項目導入的。 BLACKJACK是一個定義參考範圍的名稱空間。你需要一個BlackJackSetting類(即所有的代碼)。你可能根本不需要命名空間(BLACKJACK)。

+0

不確定你的意思是「停止引用」,但我已經導入了#include「BlackJackSetting.h」,錯誤消失了。現在,編譯時錯誤是「架構arm64的未定義符號」。 – Paul

+0

對不起,這是自動更正。這是參考文獻的「範圍」。 .h文件只有一半。另一部分將會有二十一點設置代碼。 –

+0

用BlackJackSetting.m文件更新了問題 – Paul