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提供的一个方便用户查看文件的方便功能。
我正在使用 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提供的一个方便用户查看文件的方便功能。