Header 文件无法访问

Header file is inaccessible

我正在使用 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 可以向我显示声明,这样告诉我它知道 header 在哪里并且可以读取。所以我不知道无法访问的问题是什么。 header 文件无法访问的原因是什么?

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;
};

正在查看 cocos2d-x (http://www.cocos2d-x.org/reference/native-cpp/V3.5/de/d8f/class_cocos_denshion_1_1_simple_audio_engine.html) 的文档。构造函数受到保护。您必须使用以下方法来获取共享静态简单音频引擎实例:

getInstance() 

勾选"cocos2d.h",你会发现这里没有包含"SimpleAudioEngine.h"。所以当你尝试使用它时,你必须先包含它。

通过 VS 定位头文件并不意味着该文件可以在您的 cpp 文件中访问。这只是VS提供的一个方便用户查看文件的方便功能。