NewObject is for UObject derived classes. It looks like uoure trying to spawn an actor so you would use…
GetWorld()->SpawnActor<AWeapon>(AWeapon::StaticClass());
Edit: An option then might be to make a UWeapon class that has a SpawnWeapon function you can call. That way you make a UWeapon, add it to your inventory,and when the player switches to it you can call
Inventory[index]->Spawn(parameters);