UE4 LNK2001 派生自 K2Node_AnimGetter 时出错

UE4 LNK2001 Error when deriving from K2Node_AnimGetter


我正在尝试从 K2Node_AnimGetter 派生以向其添加一些功能。 但是,当我尝试编译它时出现一些未解析的外部符号 LNK2001 错误。

从 K2Node_CallFunction(从 AnimGetter 派生的本身)派生时,我编译没有问题。
我试图在 MyGameEditor.Build.cs 中包含一些依赖项,例如 AnimGraph,但没有结果...

我是不是漏掉了什么?

K2Node_MyAnimGetter.h

#pragma once

#include "CoreMinimal.h"
#include "K2Node_AnimGetter.h"
#include "K2Node_MyAnimGetter.generated.h"

UCLASS()
class MYGAMEEDITOR_API UK2Node_MyAnimGetter : public UK2Node_AnimGetter
{
    GENERATED_BODY()
};

K2Node_MyAnimGetter.cpp

#include "K2Node_MyAnimGetter.h"
// nothing else since my class is empty

MyGameEditor.Build.cs

using UnrealBuildTool;

public class MyGameEditor : ModuleRules
{
    public MyGameEditor(ReadOnlyTargetRules Target) : base(Target)
    {
        PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
    
        PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "BlueprintGraph", "AnimGraph", "AnimGraphRunTime" });

        PrivateDependencyModuleNames.AddRange(new string[] { "Engine", "UnrealEd", "BlueprintGraph", "AnimGraph", "AnimGraphRunTime", "KismetCompiler" });
    }
}

错误日志:

1>K2Node_MyAnimGetter.cpp.obj : error LNK2001: symbole externe non resolu "public: virtual void __cdecl UK2Node_AnimGetter::Serialize(class FArchive &)" (?Serialize@UK2Node_AnimGetter@@UEAAXAEAVFArchive@@@Z)
1>K2Node_MyAnimGetter.gen.cpp.obj : error LNK2001: symbole externe non resolu "public: virtual void __cdecl UK2Node_AnimGetter::Serialize(class FArchive &)" (?Serialize@UK2Node_AnimGetter@@UEAAXAEAVFArchive@@@Z)
1>K2Node_MyAnimGetter.cpp.obj : error LNK2001: symbole externe non resolu "public: virtual void __cdecl UK2Node_AnimGetter::PostPasteNode(void)" (?PostPasteNode@UK2Node_AnimGetter@@UEAAXXZ)
1>K2Node_MyAnimGetter.gen.cpp.obj : error LNK2001: symbole externe non resolu "public: virtual void __cdecl UK2Node_AnimGetter::PostPasteNode(void)" (?PostPasteNode@UK2Node_AnimGetter@@UEAAXXZ)
1>K2Node_MyAnimGetter.cpp.obj : error LNK2001: symbole externe non resolu "public: virtual void __cdecl UK2Node_AnimGetter::AllocateDefaultPins(void)" (?AllocateDefaultPins@UK2Node_AnimGetter@@UEAAXXZ)
1>K2Node_MyAnimGetter.gen.cpp.obj : error LNK2001: symbole externe non resolu "public: virtual void __cdecl UK2Node_AnimGetter::AllocateDefaultPins(void)" (?AllocateDefaultPins@UK2Node_AnimGetter@@UEAAXXZ)
1>K2Node_MyAnimGetter.cpp.obj : error LNK2001: symbole externe non resolu "public: virtual class FText __cdecl UK2Node_AnimGetter::GetNodeTitle(enum ENodeTitleType::Type)const " (?GetNodeTitle@UK2Node_AnimGetter@@UEBA?AVFText@@W4Type@ENodeTitleType@@@Z)
1>K2Node_MyAnimGetter.gen.cpp.obj : error LNK2001: symbole externe non resolu "public: virtual class FText __cdecl UK2Node_AnimGetter::GetNodeTitle(enum ENodeTitleType::Type)const " (?GetNodeTitle@UK2Node_AnimGetter@@UEBA?AVFText@@W4Type@ENodeTitleType@@@Z)
1>K2Node_MyAnimGetter.cpp.obj : error LNK2001: symbole externe non resolu "public: virtual bool __cdecl UK2Node_AnimGetter::CanCreateUnderSpecifiedSchema(class UEdGraphSchema const *)const " (?CanCreateUnderSpecifiedSchema@UK2Node_AnimGetter@@UEBA_NPEBVUEdGraphSchema@@@Z)
1>K2Node_MyAnimGetter.gen.cpp.obj : error LNK2001: symbole externe non resolu "public: virtual bool __cdecl UK2Node_AnimGetter::CanCreateUnderSpecifiedSchema(class UEdGraphSchema const *)const " (?CanCreateUnderSpecifiedSchema@UK2Node_AnimGetter@@UEBA_NPEBVUEdGraphSchema@@@Z)
1>K2Node_MyAnimGetter.cpp.obj : error LNK2001: symbole externe non resolu "public: virtual bool __cdecl UK2Node_AnimGetter::IsActionFilteredOut(class FBlueprintActionFilter const &)" (?IsActionFilteredOut@UK2Node_AnimGetter@@UEAA_NAEBVFBlueprintActionFilter@@@Z)
1>K2Node_MyAnimGetter.gen.cpp.obj : error LNK2001: symbole externe non resolu "public: virtual bool __cdecl UK2Node_AnimGetter::IsActionFilteredOut(class FBlueprintActionFilter const &)" (?IsActionFilteredOut@UK2Node_AnimGetter@@UEAA_NAEBVFBlueprintActionFilter@@@Z)
1>K2Node_MyAnimGetter.cpp.obj : error LNK2001: symbole externe non resolu "public: virtual void __cdecl UK2Node_AnimGetter::GetMenuActions(class FBlueprintActionDatabaseRegistrar &)const " (?GetMenuActions@UK2Node_AnimGetter@@UEBAXAEAVFBlueprintActionDatabaseRegistrar@@@Z)
1>K2Node_MyAnimGetter.gen.cpp.obj : error LNK2001: symbole externe non resolu "public: virtual void __cdecl UK2Node_AnimGetter::GetMenuActions(class FBlueprintActionDatabaseRegistrar &)const " (?GetMenuActions@UK2Node_AnimGetter@@UEBAXAEAVFBlueprintActionDatabaseRegistrar@@@Z)
1>R:\SVN\MyGame\Binaries\Win64\UE4Editor-MyGameEditor.dll : fatal error LNK1120: 7 externes non resolus

如果您查看 UK2Node_AnimGetter class,您会发现它是 UCLASS(MinimalAPI)。这意味着 class 可以在其模块外部访问,但不会导出其内部函数。

您还会注意到所有具有链接器错误的函数都是虚拟重写。通过覆盖这些函数,您也许可以手动导出它们,从而修复链接错误。