结构类型重定义错误以及如何解决?

问题描述 投票:0回答:0

有一个 globals.h 头文件和 App.h 头文件,我想做的是在 globals.h 文件中包含这个应用程序结构,但问题是既然有“前向声明?”在这个包含空 App 和 BaseApp 结构以及完整 App 和 BaseApp 结构的 globals.h 文件中,编译器搞砸了。

我如何解决这个问题以在 globals.h 文件中包含完整的 App 和 BaseApp 结构而不在 globals.h 中定义结构? (目标是在 globals.h 中用一个简单的#include 包含这个 App & BaseApp 结构)

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 这样的结构所以处理起来会变得一团糟,我只想能够通过简单的包含来实现它所以一切看起来都很干净。

c++ struct linker header
© www.soinside.com 2019 - 2024. All rights reserved.