UE4 создает новый класс игрового режима c ++ - PullRequest
0 голосов
/ 20 июня 2020

Я определяю класс в заголовочном файле. Это наследование от другого класса с именем AGameMode. В редакторе я создаю новый класс из Gamemode, и он автоматически генерирует файлы .h и. cpp. Проблема в том, что я уже включил необходимые файлы заголовков, по-прежнему не вижу класс, который хочу унаследовать от него. Вместо этого выдает ошибку. Позвольте мне объяснить с помощью кода:

//ACollectorMan_GameMode.h 

#include "CoreMinimal.h"
#include "GameFramework/GameMode.h"
#include "CollectorMan_GameMode.generated.h"

UCLASS()
class MYPROJECT2_API ACollectorMan_GameMode : public AGameMode
{
    GENERATED_BODY()
    ACollectorMan_GameMode();
}

, когда я объявляю конструктор и компилирую, он показывает мне ошибку. Но если я не буду это объявлять, в строке 7 редактора (класс MYPROJECT2_API ACollectorMan_GameMode: publi c AGameMode) не будет выдано сообщение об ошибке (все равно будет красным).

Это не только для Gamemode родительский класс. У классов персонажей или пешек такая же проблема. Когда я создаю VS, я получаю эту ошибку:

CollectorMan_GameMode.cpp.obj : error LNK2019: unresolved external symbol "private: __cdecl ACollectorMan_GameMode::ACollectorMan_GameMode(void)" (??0ACollectorMan_GameMode@@AEAA@XZ) referenced in function "public: static void __cdecl ACollectorMan_GameMode::__DefaultConstructor(class FObjectInitializer const &)" (?__DefaultConstructor@ACollectorMan_GameMode@@SAXAEBVFObjectInitializer@@@Z)

CollectorMan_GameMode.gen.cpp.obj : error LNK2001: unresolved external symbol "private: __cdecl ACollectorMan_GameMode::ACollectorMan_GameMode(void)" (??0ACollectorMan_GameMode@@AEAA@XZ)

Это должна быть проблема компоновщика, однако файл «GameMode.h» доступен в «GameFramework / GameMode.h». Я могу показать вам похожий файл. Но это работает. Вот пример:

#include "CoreMinimal.h"
#include "GameFramework/GameModeBase.h"
#include "MyProject2GameMode.generated.h"

UCLASS()
class AMyProject2GameMode : public AGameModeBase
{
     GENERATED_BODY()
     AMyProject2GameMode(); 
};

Это все, что я говорю. Заранее спасибо.

1 Ответ

0 голосов
/ 21 июня 2020

Есть несколько вещей, которые необходимо решить, прежде всего, вы уверены, что знаете, что делает UCLASS () ?? Я никогда не видел такого типа объявления класса за свои 3 года работы на C ++. Также ваш второй оператор include, GameFrameWork / GameModeBase.h, похоже, предполагает, что у вас есть файлы заголовков и файлы cpp в разных папках, не делайте этого, С ++ не сможет найти ваш файл заголовка. Таким образом, ваш cpp не знает заголовочный файл и, следовательно, не может найти функции, объявленные в вашем заголовочном файле.

...