我遇到一个问题,编译器在枚举没有命名类型的情况下尖叫。 我在这里看了其他帖子(枚举没有命名类型),但大多数都是因为循环依赖问题。
输入/ RegisteredKeyEventCallback.h中的代码
#pragma once
#include "UserDefinableInput.h"
#include "../Game/Other/CallBack/CallBack.h"
#include "../Containers/LinkedList/LinkedList.h"
#include "../HashFunctions/HashFunctions.h"
using namespace std;
class InputManager;
/**
* @brief structure for saving all callbacks that belong to one ID.
*/
struct RegisteredKeyEventCallback
{
enum KEY_EVENT_TYPE_ENUM
{
KEY_PRESS, /**< When key was released and is pressed. Fired only once */
WHILE_KEY_DOWN, /**< Fired while the key is down. Multiple times */
KEY_RELEASE, /**< When key was pressed and is released now. Fired only once */
_NULL
};
/**
* @brief Creates new empty instance
*/
RegisteredKeyEventCallback();
~RegisteredKeyEventCallback();
...
};
hashfunctions.h
#pragma once
struct RegisteredKeyEventCallback;
struct KEY_EVENT_TYPE_ENUM_Hasher
{
size_t operator()(const RegisteredKeyEventCallback::KEY_EVENT_TYPE_ENUM& k) const;
};
对不起,如果我失明,但我看不到。循环依赖不应该存在,正如我所说,并且我提供的hashfunctions.h是所有代码。
仍然是编译错误 错误:struct RegisteredKeyEventCallback中的KEY_EVENT_TYPE_ENUM未命名类型。
任何帮助将不胜感激。谢谢。
代码
#pragma once
#include "UserDefinableInput.h"
#include "../Game/Other/CallBack/CallBack.h"
#include "../Containers/LinkedList/LinkedList.h"
#include "../HashFunctions/HashFunctions.h"
using namespace std;
class InputManager;
struct HashFunctions; //<---------------------------
/**
* @brief structure for saving all callbacks that belong to one ID.
*/
HashFunctions.h
#pragma once
#include "../Input/RegisteredKeyEventCallback.h"
struct KEY_EVENT_TYPE_ENUM_Hasher
{
size_t operator()(const RegisteredKeyEventCallback::KEY_EVENT_TYPE_ENUM& k) const;
};
答案 0 :(得分:3)
你是对的,你没有循环依赖,但这不是问题。问题在于HashFunctions.h
编译器不知道RegisteredKeyEventCallback::KEY_EVENT_TYPE_ENUM
是什么。
通过对RegisteredKeyEventCallback
类进行前向声明,您只能对类本身进行前向声明,而不是其成员。您需要在RegisteredKeyEventCallback
头文件中完整定义HashFunctions.h
类和其成员,这意味着您将获得需要以其他方式解决的循环依赖关系。