Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 标头中存在未声明的标识符声明,但在类源中未标识_C++_Header_Identifier_Undeclared Identifier - Fatal编程技术网

C++ 标头中存在未声明的标识符声明,但在类源中未标识

C++ 标头中存在未声明的标识符声明,但在类源中未标识,c++,header,identifier,undeclared-identifier,C++,Header,Identifier,Undeclared Identifier,所以,我遇到了一个非常简单的问题,但我似乎不知道是什么导致了它 我有一个C++类,叫做“游戏”,它包含了一个在游戏中的类声明。 以及Game.cpp中的源定义 我已经在我的“Game.cpp”中包含了“Game.h”,但由于某些原因,Visual Studio似乎无法识别Game.h中的类声明 如果能得到任何帮助,我将不胜感激。我想知道为什么会出现这种情况,以及为什么会出现以下错误: 'MyCharacter':未声明的标识符和'HandleKeyPressed':未找到标识符 游戏h: ---

所以,我遇到了一个非常简单的问题,但我似乎不知道是什么导致了它

我有一个C++类,叫做“游戏”,它包含了一个在游戏中的类声明。 以及Game.cpp中的源定义

我已经在我的“Game.cpp”中包含了“Game.h”,但由于某些原因,Visual Studio似乎无法识别Game.h中的类声明

如果能得到任何帮助,我将不胜感激。我想知道为什么会出现这种情况,以及为什么会出现以下错误:
'MyCharacter':未声明的标识符
'HandleKeyPressed':未找到标识符

游戏h:

------------------------------------------------------------------------------------------------------------------
#pragma once
#ifndef Game_Header
#define Game_Header


#include <SFML/Graphics.hpp>
#include <SFML/Audio.hpp>
#include "Character.h"
#include "FloorPlatform.h"

class Game
{
public:
        Game();
        ~Game();
        int Run();
        void HandleKeyPressed(sf::Keyboard::Key);
        Character MyCharacter;
};

#endif // !Game_Header
完整代码可在此处找到:

提前感谢您对我的帮助。

试试看

int Game::Run()
而不是

int Run()
在Game.cpp中,
HandleKeyPressed
,也是如此,因为这是
Game
类的方法。根据您的
字符.h
,您可能还需要初始化
MyCharacter

void HandleKeyPressed(sf::Keyboard::Key PressedKey){
在Game.cpp中应该是

void Game::HandleKeyPressed(sf::Keyboard::Key PressedKey){

int run()也一样。

Wow。。。我觉得自己像个白痴。因此,将方法更改为游戏名称空间就解决了问题。为什么声明名称空间不会导致类的其他成员无法识别?有人能解释一下吗?另外,为了清楚起见:我将int Run()和void HandleKeyPressed更改为int Game::Run()和void Game::HandleKeyPressed,因为您在类定义之外声明了方法定义。如果您在
Game.h
中的
Game
定义中编写了完整的方法,它可能就可以了。由于您是在类外执行此操作,因此需要使用
(范围运算符)。而且
#inlude“Game.h”
与使用名称空间不同。啊。。。这就稍微澄清了一点,但是,为什么这会影响“MyCharacter”标识符呢?我认为,因为标识符是在Game.h中声明的,所以它应该可以在Game.cpp中使用。我感谢你的帮助。我很高兴我的东西能起作用,我只是想更好地理解这一点,这样以后我就不用问那么多愚蠢的问题了。谢谢。我想这就像声明
inta
——你没有给
MyCharacter
部分赋值。然而,我只是猜测这一部分,因为我无法运行您的全部代码(包括头文件)。如果这是问题所在,请在
游戏
构造函数中为其指定值。此外,如果这个答案对您有帮助,请将其标记为已接受。
void Game::HandleKeyPressed(sf::Keyboard::Key PressedKey){