What is wrong when Casting to UObject

I will try to keep it short and clear. There is a Actor BP, inherits from a AActor cpp class. This class has a widget load function( filled in BP event graph) e.g.
**
UFUNCTION(BlueprintImplementableEvent, BlueprintCallable)
void add_soldier_widget_function();
**

This widget BP function called in beginplay. e.g.
**
void Abuild_army::BeginPlay()
{
Super::BeginPlay();
add_soldier_widget_function();
}
**

There is no issue until there. When level start to begin, widget loads and buttons appears. I want to add soldier_object to array when i press to button. There is 3 button shows up.

Add infantry

Add archer

Add cavalry

When i press “Add infantry” button, it calls a named “on_click_add_soldier_1()” function. In the function statements,i am casting my AActor ( Abuild_army) class. And calling its public add_infantry() function.

**
void Uadd_soldier_widget::on_click_add_soldier_1()
{
Abuild_army* build_army = Cast<Abuild_army>(this);

    build_army->add_infantry();
    UE_LOG(LogTemp, Warning, TEXT("on_click_add_soldier_1  LOG"));
}

**

Here is the add_infantry() function :
**
void Abuild_army::add_infantry()
{
Ukalkan* kalkan = NewObject(this); //Uobject
Ubot* bot = NewObject(this); //Uobject
Ubileklik* bileklik = NewObject(this); //Uobject
Ukask* kask = NewObject(this); //Uobject
Uzirh* zirh = NewObject(this); //Uobject
Ukilic* kilic = NewObject(this); //Uobject

    Ainfantry_actor* piyade = NewObject<Ainfantry_actor>(this);   //AActor base class

    if(this->level==1)
    {
	    kask->level = 1;
	    zirh->level = 1;
	    bot->level = 1;
	    bileklik->level = 1;
	    kalkan->level = 1;
	    kilic->level = 1;

	    piyade->helmet = kask;
	    piyade->armor = zirh;
	    piyade->boot = bot;
	    piyade->wristle = bileklik;
	    piyade->shield = kalkan;
	    piyade->melee_weapon = kilic;

	    piyade->set_AP();
	    piyade->set_DP();
    }
    else if(this->level==2)
    {
	    kask->level = 2;
	    zirh->level = 2;
	    bot->level = 2;
	    bileklik->level = 2;
	    kalkan->level = 2;
	    kilic->level = 2;

	    piyade->helmet = kask;
	    piyade->armor = zirh;
	    piyade->boot = bot;
	    piyade->wristle = bileklik;
	    piyade->shield = kalkan;
	    piyade->melee_weapon = kilic;

	    piyade->set_AP();
	    piyade->set_DP();
     }
     else if(this->level == 3)
     {
	    kask->level = 3;
	    zirh->level = 3;
	    bot->level = 3;
	    bileklik->level = 3;
	    kalkan->level = 3;
	    kilic->level = 3;

	    piyade->helmet = kask;
	    piyade->armor = zirh;
	    piyade->boot = bot;
	    piyade->wristle = bileklik;
	    piyade->shield = kalkan;
	    piyade->melee_weapon = kilic;

	    piyade->set_AP();
	    piyade->set_DP();
     }

    infantry_arr.Add(piyade);
    UE_LOG(LogTemp, Warning, TEXT("infantry added "));
 }

**

In this moment editor crashes, and shows these logs :

Fatal error: [File:D:/Build/++UE4/Sync/Engine/Source/Runtime/CoreUObject/Private/UObject/UObjectGlobals.cpp] [Line: 2262] Object is not packaged: kalkan None <— kalkan is a “shield object” inherits from UObject

UE4Editor_MyProject!Abuild_army::add_infantry() [C:\Users\kadir\Documents\Unreal Projects\MyProject 4.26\Source\MyProject\combat\denemes\build_army.cpp:176] <— line 176 is : ** Ubot* bot = NewObject(this); **

UE4Editor_MyProject!Uadd_soldier_widget::on_click_add_soldier_1() [C:\Users\kadir\Documents\Unreal Projects\MyProject 4.26\Source\MyProject\combat\UI\add_soldier_widget.cpp:24] <— UE_LOG(LogTemp, Warning, TEXT(“on_click_add_soldier_1 LOG”));

My question is, how can i cast uobjects or what i am missing here?. These all “kalkan” , “bot”, “bileklik”, “kask”, “zirh”, “kilic” objects are Uobjects and contains 3 properties and 1 function. But these properties are affect the armor and attack points.

Thanks in advance.