有一个 globals.h 头文件和 App.h 头文件,我想做的是在 globals.h 文件中包含这个应用程序结构,但问题是既然有“前向声明?”在这个包含空 App 和 BaseApp 结构以及完整 App 和 BaseApp 结构的 globals.h 文件中,编译器搞砸了。
我如何解决这个问题以在 globals.h 文件中包含完整的 App 和 BaseApp 结构而不在 globals.h 中定义结构? (目标是在 globals.h 中用一个简单的#include
globals.h
#pragma once
#include <sdk/app/App.h>
struct BaseApp {public:};
struct App : BaseApp {
public:
};
App.h
#pragma once
#include <sdk/app/BaseApp.h>
#include <sdk/component/GameLogic.h>
#include <sdk/component/TrackHandlerComponent.h>
#include <sdk/manager/ItemInfoManager.h>
#include <sdk/manager/TileSheetManager.h>
#include <sdk/manager/PlayerTributeManager.h>
#include <sdk/manager/variant_db.h>
enum class platform_id {
windows = 0,
iphone = 1,
mac = 2,
android = 4,
webos = 6,
nintendo_switch = 10,
ps4 = 11,
xbox = 12
};
#pragma pack (push,1)
struct App : BaseApp {
public:
void* vtable;
char padding_0[577];
bool showFPS;
char padding_1[1958];
Entity* entityRoot; // 2544
char padding_3[184];
GameLogic* gamelogic; // 2736
TrackHandlerComponent* track; // 2744
ItemInfoManager* iim; // 2752
std::vector<ItemInfo> itemInfo; // 2760
char padding_6[752];
Entity* entityIAP; // 3536
char padding_8[248];
ENetClient* client; // 3792
char padding_10[792]; // 4592
bool beta_mode;
char padding_11[1];
bool beta_mode2;
bool beta_mode3;
};
#pragma pack (pop)
我已经尝试将结构定义放在 globals.h 中并且它可以工作但是会有 20 个像 App 这样的结构所以处理起来会变得一团糟,我只想能够通过简单的包含来实现它所以一切看起来都很干净。