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){