【问题标题】:Header file is inaccessible头文件不可访问
【发布时间】:2023-03-25 04:34:01
【问题描述】:

我正在使用 cocos2d-x 创建我的项目,但我收到了这个错误:

错误(活动)“CocosDenshion::SimpleAudioEngine::SimpleAudioEngine()” (在“c:\MyGame”的第 256 行声明 \cocos2d\cocos\audio\include\SimpleAudioEngine.h") 是 无法访问 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;
};

【问题讨论】:

  • 这意味着SimpleAudioEngine 的默认构造函数是privateprotected
  • 再次阅读错误信息。并不是说头文件不可访问;它说构造函数CocosDenshion::SimpleAudioEngine::SimpleAudioEngine() 不可访问(可能是私有的)。

标签: c++ cocos2d-x header-files


【解决方案1】:

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

getInstance() 

【讨论】:

  • 我知道这一点,但 Visual Studio 根本不允许我调用该静态函数。它不断给出我上面描述的错误。
  • @Daniel 你能分享你的 cpp 文件吗?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 2012-02-25
    • 2011-05-12
    • 2019-07-31
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多