2016-10-23 147 views
0

我使用的cocos2d-x創建我的項目,但我得到這個錯誤:頭文件無法訪問

Error (active) "CocosDenshion::SimpleAudioEngine::SimpleAudioEngine()" (declared at line 256 of "c:\MyGame \cocos2d\cocos\audio\include\SimpleAudioEngine.h") is inaccessible MyGame c:\MyGame \Classes\MyGame .cpp

所以我包括SimpleAudioEngine.h文件到我的CPP文件,一起工作它。正如你可以從錯誤中看到,使用SimpleAudioEngine,我需要先用CocosDenshion命名空間,但只要我做打字:

CocosDenshion::SimpleAudioEngine() 

的Visual Studio顯示這個錯誤對我來說,VS能告訴我該聲明告訴我它知道標題在哪裏,並且可以被讀取。所以我不知道無法訪問會有什麼問題。頭文件無法訪問的原因是什麼?

MyGame.cpp

#include "MyGame.h" 
#include "SimpleAudioEngine.h" 
#include "GlobalVariables.h" 

USING_NS_CC; 

Scene* MyGame::createScene() 
{ 
    auto scene = Scene::create(); 
    auto layer = MyGame::create(); 
    scene->addChild(layer); 
    return scene; 
} 

bool MyGame::init() 
{ 
    if (!Layer::init()) 
    { 
     return false; 
    } 
    is_dragged = false; 

    const char* MUSIC_PATH = "Music/Main_Theme_loop.ogg"; 
    initTouch(); 
    initTiled(); 
    tempSetupSprite(); 

    debugDrawLine(); 

    this->scheduleUpdate(); 
    return true; 
} 

MyGame.h

#include "GameSprite.h" 
#include "GameMap.h" 

class MyGame : public cocos2d::Layer 
{ 
private: 
    void update(float dt); 
    void initTouch(); 
    void initTiled(); 

    void tempSetupSprite(); 
    void debugDrawLine(); 
public: 
    static cocos2d::Scene* createScene(); 

    virtual bool init(); 

    virtual bool onTouchBegan(cocos2d::Touch* _touch, cocos2d::Event* _event); 
    virtual void onTouchEnded(cocos2d::Touch* _touch, cocos2d::Event* _event); 
    virtual void onTouchMoved(cocos2d::Touch* _touch, cocos2d::Event* _event); 
    virtual void onTouchCancelled(cocos2d::Touch* _touch, cocos2d::Event* _event); 

    CREATE_FUNC(MyGame); 
private: 
    bool is_dragged; 

    Vec2 first_touch; 
    Vec2 last_drag_touch; 

    GameSprite* sprite; 
    GameMap* map; 
}; 
+2

這意味着'SimpleAudioEngine'的默認構造函數是'private'或'protected'。 – vu1p3n0x

+0

再次閱讀錯誤消息。它並沒有說頭文件是不可訪問的;它說構造函數'CocosDenshion :: SimpleAudioEngine :: SimpleAudioEngine()'是不可訪問的(可能它是私有的)。 – davmac

回答

0

綜觀的cocos2d-x的文檔(http://www.cocos2d-x.org/reference/native-cpp/V3.5/de/d8f/class_cocos_denshion_1_1_simple_audio_engine.html)。構造函數受到保護。你必須使用下面的方法來獲取共享靜態簡單的音頻引擎實例:

getInstance() 
+0

我意識到這一點,但Visual Studio不會允許我調用該靜態函數。它不斷給出我上面描述的錯誤。 –

+0

@丹尼爾你能分享你的cpp文件嗎? – wuppie367

+0

我會編輯我的問題以顯示它。 –

0

檢查「cocos2d.h」,你會發現,「SimpleAudioEngine.h」這裏不包括在內。所以當你嘗試使用它時,你必須首先包含它。

通過VS查找頭文件並不意味着該文件可以在您的cpp文件中訪問。這只是VS提供的一個方便的功能,可以讓用戶輕鬆查看文件。