2023/08/25_UE5.1_未解決の外部参照(TakeWidget、StaticClass、CreateWidgetInstance、Z_Construct_UClass_UUserWidget_NoRegister)

重大度レベル コード 説明 プロジェクト ファイル 抑制状態

エラー LNK2019 未解決の外部シンボル "__declspec(dllimport) class UClass * __cdecl Z_Construct_UClass_UUserWidget_NoRegister(void)" (__imp_?Z_Construct_UClass_UUserWidget_NoRegister@@YAPEAVUClass@@XZ) が関数 "void __cdecl `dynamic initializer for 'public: static struct UECodeGen_Private::FClassPropertyParams const Z_Construct_UClass_ULoadingScreenGameInstance_Statics::NewProp_wLoading''(void)" (??__E?NewProp_wLoading@Z_Construct_UClass_ULoadingScreenGameInstance_Statics@@2UFClassPropertyParams@UECodeGen_Private@@B@@YAXXZ) で参照されました PluginTest5_1 C:\Users\roy00\OneDrive\Documents\Unreal Projects\PluginTest5_1\Intermediate\ProjectFiles\Module.AsyncLevelLoad.cpp.obj 1

エラー LNK2019 未解決の外部シンボル "__declspec(dllimport) public: class TSharedRef<class SWidget,1> __cdecl UWidget::TakeWidget(void)" (__imp_?TakeWidget@UWidget@@QEAA?AV?$TSharedRef@VSWidget@@$00@@XZ) が関数 "public: void __cdecl ULoadingScreenGameInstance::BindLoadingContent(void)" (?BindLoadingContent@ULoadingScreenGameInstance@@QEAAXXZ) で参照されました PluginTest5_1 C:\Users\roy00\OneDrive\Documents\Unreal Projects\PluginTest5_1\Intermediate\ProjectFiles\Module.AsyncLevelLoad.cpp.obj 1

エラー LNK2019 未解決の外部シンボル "__declspec(dllimport) public: static class UClass * __cdecl UUserWidget::StaticClass(void)" (__imp_?StaticClass@UUserWidget@@SAPEAVUClass@@XZ) が関数 "class UUserWidget * __cdecl CreateWidget<class UUserWidget,class ULoadingScreenGameInstance *>(class ULoadingScreenGameInstance *,class TSubclassOf<class UUserWidget>,class FName)" (??$CreateWidget@VUUserWidget@@PEAVULoadingScreenGameInstance@@@@YAPEAVUUserWidget@@PEAVULoadingScreenGameInstance@@V?$TSubclassOf@VUUserWidget@@@@VFName@@@Z) で参照されました PluginTest5_1 C:\Users\roy00\OneDrive\Documents\Unreal Projects\PluginTest5_1\Intermediate\ProjectFiles\Module.AsyncLevelLoad.cpp.obj 1

エラー LNK2019 未解決の外部シンボル "__declspec(dllimport) public: static class UUserWidget * __cdecl UUserWidget::CreateWidgetInstance(class UGameInstance &,class TSubclassOf<class UUserWidget>,class FName)" (__imp_?CreateWidgetInstance@UUserWidget@@SAPEAV1@AEAVUGameInstance@@V?$TSubclassOf@VUUserWidget@@@@VFName@@@Z) が関数 "class UUserWidget * __cdecl CreateWidget<class UUserWidget,class ULoadingScreenGameInstance *>(class ULoadingScreenGameInstance *,class TSubclassOf<class UUserWidget>,class FName)" (??$CreateWidget@VUUserWidget@@PEAVULoadingScreenGameInstance@@@@YAPEAVUUserWidget@@PEAVULoadingScreenGameInstance@@V?$TSubclassOf@VUUserWidget@@@@VFName@@@Z) で参照されました PluginTest5_1 C:\Users\roy00\OneDrive\Documents\Unreal Projects\PluginTest5_1\Intermediate\ProjectFiles\Module.AsyncLevelLoad.cpp.obj 1

Bardの回答

エラーメッセージによると、ULoadingScreenGameInstanceクラスのBindLoadingContent()関数で、UWidgetクラスのTakeWidget()関数、StaticClass()関数、CreateWidgetInstance()関数、Z_Construct_UClass_UUserWidget_NoRegister()関数が未解決の外部参照として示されています。

これらの関数は、UWidgetクラスで定義されています。UWidgetクラスは、Unreal Engineの標準ライブラリに含まれているため、Unreal Engineをインストールしていれば、これらの関数が定義されているヘッダーファイルをインクルードすることでエラーを解決できます。

具体的には、以下のファイルのインクルードが必要です。

Runtime/Engine/Public/UMG/UserWidget.h

これらのファイルをインクルードするには、プロジェクトの.Build.csファイルに以下の行を追加します。

PrivateDependencyModuleNames.AddRange(new string[] {

    "Core", "CoreUObject", "Engine", "InputCore", "UMG",

});

また、.hファイルに以下のヘッダーファイルのインクルード宣言を追加します。

#include "Runtime/Engine/Public/UMG/UserWidget.h"

これらの変更を行った後、プロジェクトをビルドし直すと、エラーが解決されるはずです。

なお、これらの変更を行う前に、プロジェクトの.Build.csファイルに以下の行を追加しておくと、エラーが解決するかどうかを簡単に確認できます。

bUsePrecompiledHeaders = false;

この行を追加すると、プロジェクトはプリコンパイル済みヘッダーを使用せずにビルドされます。これにより、エラーの原因が未解決の外部参照かどうかを簡単に判断できます。

解決

Pluginのbuild.csに"UMG",を追加して解決。