Ошибки структуры таблицы данных UE4

Я следую учебнику Packt относительно записи в таблице CSV. В руководстве требуется, чтобы я a) создал новый класс Actor, b) назвал его TestCustomData и c) заменил содержимое вновь созданного класса. сгенерировал TestCustomData.h со следующим кодом:

#pragma once

#include "TestCustomData.generated.h"

USTRUCT(BlueprintType)
struct FTestCustomData : public FTableRowBase
{
GENERATED_USTRUCT_BODY()

UPROPERTY( BlueprintReadOnly, Category = "TestCustomData" )
int32 SomeNumber;

UPROPERTY( BlueprintReadOnly, Category = "TestCustomData" )
FString SomeString;
};

Однако файл TestCustomData не может быть скомпилирован, и выводится следующий журнал:

Error f:\unreal\ue4 assignments\ue4_projectrpg\source\ue4_projectrpg\TestCustomData.h(5) : error C2504: 'FTableRowBase': base class undefined
Info Compiling game modules for hot reload
Info Parsing headers for UE4_ProjectRPGEditor
Info   Running UnrealHeaderTool "F:\Unreal\UE4 Assignments\UE4_ProjectRPG\UE4_ProjectRPG.uproject" "F:\Unreal\UE4 Assignments\UE4_ProjectRPG\Intermediate\Build\Win64\UE4_ProjectRPGEditor\Development\UE4_ProjectRPGEditor.uhtmanifest" -LogCmds="loginit warning, logexit warning, logdatabase error" -Unattended -WarningsAsErrors -installed
Info Reflection code generated for UE4_ProjectRPGEditor in 3.4146568 seconds
Info Performing 4 actions (4 in parallel)
Info TestCustomData.cpp
Info UE4_ProjectRPG.generated.cpp
Error f:\unreal\ue4 assignments\ue4_projectrpg\source\ue4_projectrpg\TestCustomData.h(6) : error C3646: 'Super': unknown override specifier
Error f:\unreal\ue4 assignments\ue4_projectrpg\source\ue4_projectrpg\TestCustomData.h(6) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Error F:\Unreal\UE4 Assignments\UE4_ProjectRPG\Source\UE4_ProjectRPG\TestCustomData.h(5) : error C2504: 'FTableRowBase': base class undefined
Error F:\Unreal\UE4 Assignments\UE4_ProjectRPG\Source\UE4_ProjectRPG\TestCustomData.h(6) : error C3646: 'Super': unknown override specifier
Error F:\Unreal\UE4 Assignments\UE4_ProjectRPG\Source\UE4_ProjectRPG\TestCustomData.h(6) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Info ERROR: UBT ERROR: Failed to produce item: F:\Unreal\UE4 Assignments\UE4_ProjectRPG\Binaries\Win64\UE4Editor-UE4_ProjectRPG-3031.dll
Info Total build time: 6.88 seconds (Local executor: 0.00 seconds)

Я новичок в StackOverflow и C ++ в UE4, и любая помощь будет принята с благодарностью. Также приветствуются любые отзывы, улучшающие мой вопрос! Заранее спасибо за помощь.


person J. Tucker    schedule 01.08.2017    source источник


Ответы (4)


Я застрял в одном и том же месте, и это исправило его: я назвал актив «MyActor2», а структуру Strucure «ThisNewStructure», так что есть некоторые небольшие различия ...

Я думаю, что в основном это Datatable.h и "public:", которые помогли.

Заголовочный файл:

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Runtime/Engine/Classes/Engine/DataTable.h"
#include "MyActor2.generated.h"

USTRUCT(BlueprintType)
struct FThisNewStructure : public FTableRowBase
{
    GENERATED_USTRUCT_BODY()
public:

    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = test)
        int32 SomeNumber;
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = test)
        FString SomeString;

};

cpp:

#include "MyActor2.h"

Затем он успешно компилируется. Мне пришлось закрыть / снова открыть VS & UE, чтобы редактор узнал о новой структуре.

person niltathra    schedule 06.08.2017
comment
Сначала это не сработало, но я вернулся и настроил его, и теперь он, кажется, компилируется. Было несколько небольших ошибок в VS, но не было проблем в UE4. Это странно - но я не жалуюсь. Я просто хочу, чтобы руководство было более понятным - без дополнительной помощи трудно устранить неполадки. Спасибо. - person J. Tucker; 07.08.2017
comment
Насколько я понял, может быть нормально получать ошибки при компиляции в VS. Вы всегда должны компилировать из UE-Editor. - person niltathra; 07.08.2017

На первый взгляд кажется, что файл заголовка, описывающий FTableRowBase, не был включен. Ошибки, которые вы видите в своем выводе - «отсутствует спецификатор типа» и т. Д., Указывают на то, что ваш компилятор не знает, что такое FTableRowBase, поэтому он не может быть производным от него. Включение заголовка, описывающего родительский класс, должно исправить это.

person Kevin Mack    schedule 02.08.2017
comment
Я не совсем уверен, каким будет заголовок в этом контексте. Приведенный выше код был скопирован и вставлен непосредственно из учебника - без каких-либо изменений - как указано в учебнике. Как будет выглядеть дополнительный файл заголовка? Меня не просили ссылаться на какие-либо дополнительные документы или создавать ссылки на файлы. - person J. Tucker; 06.08.2017

Может быть, немного поздно, но я сам столкнулся с этим. Иногда у вас есть включение, которое автоматически захватывает FTableRowBase, но иногда у класса нет заголовка, который обращается к нему. В этом случае:

#pragma once

#include "Engine/DataTable.h"//this is where FTableRowBase is declared.
#include "TestCustomData.generated.h"

struct FFoo : FTableRowBase
{
    GENERATED_USTRUCT_BODY()
    public:
       the rest of your class...

Надеюсь, это поможет! : D

person DeepFriedCircuits    schedule 13.09.2017

Спасибо за помощь, я работал над той же проблемой в том же руководстве. Очевидно, вам не нужно было переименовывать TestCustomData в MyActor2, вам просто нужно было добавить строку «public:» после «GENERATED_USTRUCT_BODY ()».

person Darrell Quick    schedule 30.03.2018