OK! I found a solution! The default constructor provided by the wizard is invalid. The code needs to force the .h file to be constructed each time.
CardDetail.h:
#pragma once
#include "CardDetail.generated.h"
/** Structure that defines a level up table entry */
USTRUCT(BlueprintType)
struct FLevelUpData : public FTableRowBase
{
GENERATED_USTRUCT_BODY()
public:
FLevelUpData()
: XPtoLvl(0)
, XP(0)
{}
/** The 'Name' column is the same as the XP Level */
/** XP to get to the given level from the previous level */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = LevelUp)
int32 XPtoLvl;
/** This was the old property name (represented total XP) */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = LevelUp)
int32 XP;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = LevelUp)
TAssetPtr<UTexture> Asset;
};
UCLASS(Abstract, CustomConstructor)
class UCardDetail : public UObject
{
GENERATED_UCLASS_BODY()
UCardDetail(const class FPostConstructInitializeProperties& PCIP) : Super(PCIP) {}
};
In the .cpp file just remove the references to the constructor and destructor.