没有一个不是用NewObject,NewNamedObject或ConstructObject构建的,但它是

None is not being constructed with either NewObject, NewNamedObject or ConstructObject... but it is

本文关键字:构建 ConstructObject NewNamedObject 有一个 NewObject      更新时间:2023-10-16

我正在使用NewObject初始化UObject,但是当我运行我的项目时它崩溃了。我做错了什么?

我已经尝试使用房间生成器作为Actor和基本类,但仍然遇到相同的错误。

正在调用的函数:

void ADungeonGenerator::GenerateDungeon()
{
URoomGenerator* roomGenerator = NewObject<URoomGenerator>();
roomGenerator->Init(5, 5, 5, 5);
ARoom* room = roomGenerator->GenerateRoom();
}

房间发电机类:

#include "CoreMinimal.h"
#include "Room.h"
#include "RoomGenerator.generated.h"
UCLASS()
class URoomGenerator : public UObject
{
GENERATED_BODY()
public: 
URoomGenerator(uint8 minX, uint8 maxX, uint8 minY, uint8 maxY);
URoomGenerator() {};
void Init(uint8 minX, uint8 maxX, uint8 minY, uint8 maxY);
ARoom* GenerateRoom();
private:
uint8 minX;
uint8 maxX;
uint8 minY;
uint8 maxY;
};

崩溃报告:

LoginId:a5fa88794956fc1be51808b1cb46e03b
EpicAccountId:e2ee81ebb2324ef4b67872a90edeabef
Assertion failed: [File:D:Build++UE4SyncEngineSourceRuntimeCoreUObjectPrivateUObjectUObjectGlobals.cpp] [Line: 2496] None is not being constructed with either NewObject, NewNamedObject or ConstructObject.
UE4Editor_Core!FWindowsErrorOutputDevice::Serialize() [d:build++ue4syncenginesourceruntimecoreprivatewindowswindowserroroutputdevice.cpp:79]
UE4Editor_Core!FOutputDevice::LogfImpl() [d:build++ue4syncenginesourceruntimecoreprivatemiscoutputdevice.cpp:71]
UE4Editor_Core!AssertFailedImplV() [d:build++ue4syncenginesourceruntimecoreprivatemiscassertionmacros.cpp:101]
UE4Editor_Core!FDebug::AssertFailed() [d:build++ue4syncenginesourceruntimecoreprivatemiscassertionmacros.cpp:449]
UE4Editor_CoreUObject!UObject::UObject() [d:build++ue4syncenginesourceruntimecoreuobjectprivateuobjectuobjectglobals.cpp:2496]
UE4Editor_Engine!AActor::AActor() [d:build++ue4syncenginesourceruntimeengineprivateactor.cpp:82]
UE4Editor_GreenPen_2449!ARoomGenerator::ARoomGenerator() [D:DevelopmentGreenPenSourceGreenPenRoomGenerator.cpp:10]
UE4Editor_GreenPen_2449!ADungeonGenerator::execGenerateDungeon() [D:DevelopmentGreenPenSourceGreenPenDungeonGenerator.h:15]
UE4Editor_CoreUObject!UFunction::Invoke() [d:build++ue4syncenginesourceruntimecoreuobjectprivateuobjectclass.cpp:4643]
UE4Editor_CoreUObject!UObject::CallFunction() [d:build++ue4syncenginesourceruntimecoreuobjectprivateuobjectscriptcore.cpp:904]
UE4Editor_CoreUObject!UObject::ProcessContextOpcode() [d:build++ue4syncenginesourceruntimecoreuobjectprivateuobjectscriptcore.cpp:2314]
UE4Editor_CoreUObject!ProcessLocalScriptFunction() [d:build++ue4syncenginesourceruntimecoreuobjectprivateuobjectscriptcore.cpp:974]
UE4Editor_CoreUObject!ProcessScriptFunction<void (__cdecl*)(UObject *,FFrame &,void *)>() [d:build++ue4syncenginesourceruntimecoreuobjectprivateuobjectscriptcore.cpp:809]
UE4Editor_CoreUObject!ProcessLocalFunction() [d:build++ue4syncenginesourceruntimecoreuobjectprivateuobjectscriptcore.cpp:1033]
UE4Editor_CoreUObject!ProcessLocalScriptFunction() [d:build++ue4syncenginesourceruntimecoreuobjectprivateuobjectscriptcore.cpp:974]
UE4Editor_CoreUObject!UObject::ProcessInternal() [d:build++ue4syncenginesourceruntimecoreuobjectprivateuobjectscriptcore.cpp:1058]
UE4Editor_CoreUObject!UFunction::Invoke() [d:build++ue4syncenginesourceruntimecoreuobjectprivateuobjectclass.cpp:4643]
UE4Editor_CoreUObject!UObject::ProcessEvent() [d:build++ue4syncenginesourceruntimecoreuobjectprivateuobjectscriptcore.cpp:1464]
UE4Editor_Engine!AActor::ProcessEvent() [d:build++ue4syncenginesourceruntimeengineprivateactor.cpp:769]
UE4Editor_Engine!AActor::BeginPlay() [d:build++ue4syncenginesourceruntimeengineprivateactor.cpp:3383]
UE4Editor_Engine!AActor::DispatchBeginPlay() [d:build++ue4syncenginesourceruntimeengineprivateactor.cpp:3343]
UE4Editor_Engine!AWorldSettings::NotifyBeginPlay() [d:build++ue4syncenginesourceruntimeengineprivateworldsettings.cpp:253]
UE4Editor_Engine!AGameStateBase::HandleBeginPlay() [d:build++ue4syncenginesourceruntimeengineprivategamestatebase.cpp:177]
UE4Editor_Engine!UWorld::BeginPlay() [d:build++ue4syncenginesourceruntimeengineprivateworld.cpp:3948]
UE4Editor_Engine!UGameInstance::StartPlayInEditorGameInstance() [d:build++ue4syncenginesourceruntimeengineprivategameinstance.cpp:413]
UE4Editor_UnrealEd!UEditorEngine::CreatePIEGameInstance() [d:build++ue4syncenginesourceeditorunrealedprivateplaylevel.cpp:3341]
UE4Editor_UnrealEd!UEditorEngine::PlayInEditor() [d:build++ue4syncenginesourceeditorunrealedprivateplaylevel.cpp:2466]
UE4Editor_UnrealEd!UEditorEngine::StartQueuedPlayMapRequest() [d:build++ue4syncenginesourceeditorunrealedprivateplaylevel.cpp:1280]
UE4Editor_UnrealEd!UEditorEngine::Tick() [d:build++ue4syncenginesourceeditorunrealedprivateeditorengine.cpp:1532]
UE4Editor_UnrealEd!UUnrealEdEngine::Tick() [d:build++ue4syncenginesourceeditorunrealedprivateunrealedengine.cpp:403]
UE4Editor!FEngineLoop::Tick() [d:build++ue4syncenginesourceruntimelaunchprivatelaunchengineloop.cpp:3967]
UE4Editor!GuardedMain() [d:build++ue4syncenginesourceruntimelaunchprivatelaunch.cpp:168]
UE4Editor!GuardedMainWrapper() [d:build++ue4syncenginesourceruntimelaunchprivatewindowslaunchwindows.cpp:145]
UE4Editor!WinMain() [d:build++ue4syncenginesourceruntimelaunchprivatewindowslaunchwindows.cpp:275]
UE4Editor!__scrt_common_main_seh() [d:agent_work3ssrcvctoolscrtvcstartupsrcstartupexe_common.inl:288]
kernel32
ntdll

地下城生成器.h

#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "RoomGenerator.h"
#include "DungeonGenerator.generated.h"
UCLASS()
class GREENPEN_API ADungeonGenerator : public AActor
{
GENERATED_BODY()
public: 
// Sets default values for this actor's properties
ADungeonGenerator();
UFUNCTION(BlueprintCallable, Category = "GreenPen Dungeon Generator")
void GenerateDungeon();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
};

运行项目时,我收到错误消息"未使用 NewObject、NewNamedObject 或 ConstructObject 构造无"...我希望调试器进入生成室功能。

啊哈...

这句话说明了一切...

UE4Editor_GreenPen_2449!ARoomGenerator::ARoomGenerator([D:\Development\GreenPen\Source\GreenPen\RoomGenerator.cpp:10]

。那是在我删除的旧文件上,我进行了清理和重建,一切又开始工作了。

多亏了巴斯,我被指出了正确的方向。