UE4 数据表结构错误

UE4 Data Table Struct Errors

本文关键字:错误 结构 数据表 UE4      更新时间:2023-10-16

我正在遵循有关CSV表条目的Pact教程。本教程要求我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:unrealue4 assignmentsue4_projectrpgsourceue4_projectrpgTestCustomData.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:UnrealUE4 AssignmentsUE4_ProjectRPGUE4_ProjectRPG.uproject" "F:UnrealUE4 AssignmentsUE4_ProjectRPGIntermediateBuildWin64UE4_ProjectRPGEditorDevelopmentUE4_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:unrealue4 assignmentsue4_projectrpgsourceue4_projectrpgTestCustomData.h(6) : error C3646: 'Super': unknown override specifier
Error f:unrealue4 assignmentsue4_projectrpgsourceue4_projectrpgTestCustomData.h(6) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Error F:UnrealUE4 AssignmentsUE4_ProjectRPGSourceUE4_ProjectRPGTestCustomData.h(5) : error C2504: 'FTableRowBase': base class undefined
Error F:UnrealUE4 AssignmentsUE4_ProjectRPGSourceUE4_ProjectRPGTestCustomData.h(6) : error C3646: 'Super': unknown override specifier
Error F:UnrealUE4 AssignmentsUE4_ProjectRPGSourceUE4_ProjectRPGTestCustomData.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:UnrealUE4 AssignmentsUE4_ProjectRPGBinariesWin64UE4Editor-UE4_ProjectRPG-3031.dll
Info Total build time: 6.88 seconds (Local executor: 0.00 seconds)

我对UE4中的StackOverflow和C++相当陌生,任何帮助将不胜感激。也欢迎任何反馈来改进我的问题!提前感谢您的帮助。

我被困在同一个地方,这修复了它: 我将资产命名为"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,以便编辑器了解新结构。

可能有点晚了,但我自己也遇到了这个问题。有时你会有一个自动抓取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

感谢您的帮助,我在同一教程中解决了相同的问题。显然,您不需要将TestCustomData重命名为MyActor2,您只需要在"GENERATED_USTRUCT_BODY(("之后添加"public:"行。