2016-10-23 8 views
0

Я использую cocos2d-х, чтобы создать свой проект, но я получаю эту ошибку:Заголовочный файл недоступен

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-х (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

@ Daniel вы можете поделиться своим файлом cpp? – wuppie367

+0

Я отредактирую свой вопрос выше, чтобы показать его. –

0

Check «cocos2d.h», и вы увидите, что «SimpleAudioEngine.h» не входит здесь. Поэтому сначала вы должны включить его, когда пытаетесь его использовать.

Поиск файла заголовка VS не означает, что файл доступен в вашем файле cpp. Это просто удобная функция, предоставляемая VS, чтобы пользователь мог легко проверить файл.