C++ UE4数据表结构错误

C++ UE4数据表结构错误,c++,visual-c++,unreal-engine4,C++,Visual C++,Unreal Engine4,下面是关于CSV表条目的Packt教程。本教程要求Ia)创建一个新的Actor类,b)将其命名为TestCustomData,并且c)用以下代码替换新生成的TestCustomData.h的内容: #pragma once #include "TestCustomData.generated.h" USTRUCT(BlueprintType) struct FTestCustomData : public FTableRowBase { GENERATED_USTRUCT_BODY() U

下面是关于CSV表条目的Packt教程。本教程要求Ia)创建一个新的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)

<>我对UE4中的StAcdPoST和C++比较新,任何帮助都会被理解。我们也欢迎任何改进我的问题的反馈!提前感谢您的帮助。

乍一看,似乎还没有包含描述FTableRowBase的头文件。您在输出中看到的错误——“缺少类型说明符”等表明编译器不知道FTableRowBase是什么,因此无法从中派生。包括描述父类的标题应该可以解决这个问题。

我被卡在了同一个位置,这就解决了它: 我将资产命名为“MyActor2”和结构命名为“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:

然后编译成功。
我不得不关闭/重新打开VS&UE,让编辑了解新的结构。

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

在这种情况下,我不确定确切的标题是什么。上述代码是直接从教程中复制和粘贴的,而不是教程中所述的任何编辑。附加的头文件是什么样子的?我没有被要求链接到任何其他文档,也没有创建文件引用。这最初不起作用,但我已经返回并调整了它,现在它似乎可以编译了。VS中有几个小错误,但UE4中没有问题。这很奇怪,但我没有抱怨。我只希望教程更清晰-没有额外的帮助很难排除故障。谢谢。据我所知,在VS中编译时出错是正常的。您应该始终从UE编辑器中编译。
#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...