Я создавал класс в том же заголовочном файле, считая, что он будет небольшим, так как мой код был разработан, его нужно было поместить в несколько файлов заголовков/cpp. Моя структура данных зависит от перечисления, которое теперь включено в другой заголовочный файл. Компилятор жалуется."ошибка C2065: необъявленный идентификатор" Включить включение из другого заголовка
ошибка 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 "..\ConsoleApplication1\RandomNumber.h"
#include "..\ConsoleApplication1\PlayerName.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
Я попытался также Экстерн перечислимую GameDataType {GameData = 0, Playername , СЛУЧАЙНОЕ ЧИСЛО};
Не следует переводить переменную enum в класс EnumBox. И использовать значения enum непосредственно, как 'EnumBox :: RANDOMNUMBER' – Chintan
По какой-то причине мне не нужно было определять перечисление как тип данных, как показано в моем обновлении ниже. Не требуется класс для обертки перечисления. – JFGames