"error C2065: undeclared identifier" 来自另一个标头的枚举
"error C2065: undeclared identifier" Enum inclusion from another header
我在同一个头文件中构建了一个类,认为它会很小,因为我的代码开发过程中需要将它放入多个头/cpp文件中。我的数据结构依赖于一个枚举,该枚举现在包含在另一个头文件中。编译器抱怨。
错误C2653:"EnumBox":不是类或命名空间名称
错误C2065:"PLAYERNAME":未声明的标识符
错误C2065:"RANDOMNUMBER":未声明的标识符
当它们都是在同一个头文件中使用我的枚举的类时,它就起作用了。发生了什么事?Extern似乎不适用于枚举。
GameDataNetworkHelper.h
#pragma once
#ifndef GAMEDATANETWORKHELPER_H
#define GAMEDATANETWORKHELPER_H
#include "../RakNetP2PExample/NetworkHelper.h"
#include "../GameExample/NumberGuesser.h"
#include "BitStream.h"
#include "../RakNetP2PExample/GameData.h"
#include "..ConsoleApplication1RandomNumber.h"
#include "..ConsoleApplication1PlayerName.h"
class NumberGuesser;
class NetworkHelper;
class EnumBox
{
public:
static const enum GameDataType {GAMEDATA = 0, PLAYERNAME=1, RANDOMNUMBER=2};
};
//..some code which uses RandomNumber, and PlayerName
#endif
和RandomNumber.h
#pragma once
#ifndef RANDOMNUMBER_H
#define RANDOMNUMBER_H
#include "../RakNetP2PExample/NetworkHelper.h"
#include "../GameExample/NumberGuesser.h"
#include "BitStream.h"
#include "../RakNetP2PExample/GameData.h"
#include "GameDataNetworkHelper.h"
class RandomNumber : public GameData
{
public:
static const int randomNumberType = EnumBox::GameDataType::RANDOMNUMBER;
//.. some other code
};
#endif
PlayerName.h
#pragma once
#ifndef PLAYERNAME_H
#define PLAYERNAME_H
#include "../RakNetP2PExample/NetworkHelper.h"
#include "../GameExample/NumberGuesser.h"
#include "BitStream.h"
#include "../RakNetP2PExample/GameData.h"
#include "GameDataNetworkHelper.h"
class PlayerName : public GameData
{
public:
static const int playerNameType = EnumBox::PLAYERNAME;
//...some other code
};
#endif
我也试过extern enum GameDataType{GAMEDATA=0,PLAYERNAME,RANDOMNUMBER};
您有两个标头试图相互包含。删除任何不需要的#include
;并在可能的情况下尝试用正向声明来替换它们。
特别地,找到一种方法来阻止GameDataNetworkHelper.h
和RandomNumber.h
相互包括。除非RandomNumber
正在做一些非常奇怪的事情,否则它不应该依赖于游戏、数据或网络。也许您可以将EnumBox
移动到一个单独的标头中,这样它只需要包含它。
这很奇怪,但它不喜欢将它与GamaDataNetworkHelper类放在同一个文件中。
这篇文章帮助很大:将枚举放在cpp程序中的何处?
在上面的帖子之后,我制作了一个普通的.h类。
#ifndef COMMON_H
#define COMMON_H
enum GameDataType {GAMEDATA = 0, PLAYERNAME=1, RANDOMNUMBER=2};
#endif
然后更新这两个派生类型。
class RandomNumber : public GameData
{
public:
static const int randomNumberType = RANDOMNUMBER;
int randomNumb;
int maxNumber;
RandomNumber()
{
type = randomNumberType;
}
~RandomNumber()
{
}
//... continues
};
相关文章:
- 我在 .h 中有一个枚举类,并且在.cpp错误中有一个运算符重载:与"运算符<<不匹配
- 我正在尝试创建一个枚举,但得到了"identifier expected error"
- 如何在交换机中将一个枚举值标记为不适当的大小写
- 从另一个C++文件中C++ "Importing"枚举类
- 如何声明另一个类中的枚举
- C/C :提取一个枚举的子集以形成新的枚举
- 为什么将FMTFLAG指定两次 - 作为枚举的一部分,而另一个实例为静态const变量
- 有没有办法在一个枚举条目中存储多个值
- 为什么我的程序中的一个枚举具有奇怪的价值131075?
- 将一个枚举映射到另一个枚举
- 尝试从另一个类传入枚举
- 将枚举传递给另一个文件?C++
- "error C2065: undeclared identifier" 来自另一个标头的枚举
- 为了简洁起见,在另一个文件中定义前向声明的嵌套结构/类/枚举
- 在Selene中包装一个枚举,以便在Lua中访问
- 为什么我不能将一个枚举作为另一个枚举的基础类型?
- 初始化一个枚举,比如它是一个类,以避免强制类型转换
- 我怎么能有一个枚举自定义类
- Typedef是C++中的一个枚举值
- C++ DirectX11 返回一个枚举类