GetAllRows get empty array

What I do

create a struct use cpp like
USTRUCT(BlueprintType)
struct FSkillData: public FTableRowBase
{
GENERATED_BODY()

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Skill)
FName SkillID;
};

I create a data table use that type FSkillData in edit,and add some data.
3.open the table use cpp like
UDataTable* SkillDataTable = LoadObject(this, TEXT(DEF_SKILL_DATA_PATH));
TArray<FSkillData*> LoadSkillDataList;
SkillDataTable->GetAllRows(TEXT(“LoadSkillDataTable”), LoadSkillDataList);

LoadSkillDataList is empty,
4.Use GetRowNames and FindRow functionWhat I do

create a struct use cpp like
USTRUCT(BlueprintType)
struct FSkillData: public FTableRowBase
{
GENERATED_BODY()

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Skill)
FName SkillID;
};

I create a data table use that type FSkillData in edit,and add some data.
3.open the table use cpp like
UDataTable* SkillDataTable = LoadObject(this, TEXT(DEF_SKILL_DATA_PATH));
TArray<FSkillData*> LoadSkillDataList;
SkillDataTable->GetAllRows(TEXT(“LoadSkillDataTable”), LoadSkillDataList);

LoadSkillDataList is empty,
4.Use GetRowNames and FindRow function is ok. I can read all data.

My Question
I create FSkillData in cpp, but name type is SkillData in edit.
Are them the same type? Because GetAllRows will check the type.

SkillDataTable->GetRowStruct()->GetName(); What I do

create a struct use cpp like
USTRUCT(BlueprintType)
struct FSkillData: public FTableRowBase
{
GENERATED_BODY()

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Skill)
FName SkillID;
};

I create a data table use that type FSkillData in edit,and add some data.
3.open the table use cpp like
UDataTable* SkillDataTable = LoadObject(this, TEXT(DEF_SKILL_DATA_PATH));
TArray<FSkillData*> LoadSkillDataList;
SkillDataTable->GetAllRows(TEXT(“LoadSkillDataTable”), LoadSkillDataList);

LoadSkillDataList is empty,
4.Use GetRowNames and FindRow functionWhat I do

  1. create a struct use cpp like
    USTRUCT(BlueprintType)
    struct FSkillData: public FTableRowBase
    {
    GENERATED_BODY()

    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Skill)
    FName SkillID;
    };

  2. I create a data table use that type FSkillData in edit,and add some data.
    3.open the table use cpp like
    UDataTable* SkillDataTable = LoadObject(this, TEXT(DEF_SKILL_DATA_PATH));
    TArray<FSkillData*> LoadSkillDataList;
    SkillDataTable->GetAllRows(TEXT(“LoadSkillDataTable”), LoadSkillDataList);

LoadSkillDataList is empty,
4.Use GetRowNames and FindRow function is ok. I can read all data.

My Question
I create FSkillData in cpp, but name type is SkillData in edit.
Are them the same type? Because GetAllRows will check the type.

I print this , and the type is SkillData.
SkillDataTable->GetRowStruct()->GetName();

Them should be the same typeWhat I do

create a struct use cpp like
USTRUCT(BlueprintType)
struct FSkillData: public FTableRowBase
{
GENERATED_BODY()

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Skill)
FName SkillID;
};

I create a data table use that type FSkillData in edit,and add some data.
3.open the table use cpp like
UDataTable* SkillDataTable = LoadObject(this, TEXT(DEF_SKILL_DATA_PATH));
TArray<FSkillData*> LoadSkillDataList;
SkillDataTable->GetAllRows(TEXT(“LoadSkillDataTable”), LoadSkillDataList);

LoadSkillDataList is empty,
4.Use GetRowNames and FindRow functionWhat I do

create a struct use cpp like
USTRUCT(BlueprintType)
struct FSkillData: public FTableRowBase
{
GENERATED_BODY()

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Skill)
FName SkillID;
};

I create a data table use that type FSkillData in edit,and add some data.
3.open the table use cpp like
UDataTable* SkillDataTable = LoadObject(this, TEXT(DEF_SKILL_DATA_PATH));
TArray<FSkillData*> LoadSkillDataList;
SkillDataTable->GetAllRows(TEXT(“LoadSkillDataTable”), LoadSkillDataList);

LoadSkillDataList is empty,
4.Use GetRowNames and FindRow function is ok. I can read all data.

My Question
I create FSkillData in cpp, but name type is SkillData in edit.
Are them the same type? Because GetAllRows will check the type.

SkillDataTable->GetRowStruct()->GetName(); What I do

create a struct use cpp like
USTRUCT(BlueprintType)
struct FSkillData: public FTableRowBase
{
GENERATED_BODY()

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Skill)
FName SkillID;
};

I create a data table use that type FSkillData in edit,and add some data.
3.open the table use cpp like
UDataTable* SkillDataTable = LoadObject(this, TEXT(DEF_SKILL_DATA_PATH));
TArray<FSkillData*> LoadSkillDataList;
SkillDataTable->GetAllRows(TEXT(“LoadSkillDataTable”), LoadSkillDataList);

LoadSkillDataList is empty,
4.Use GetRowNames and FindRow functionWhat I do

  1. create a struct use cpp like
    USTRUCT(BlueprintType)
    struct FSkillData: public FTableRowBase
    {
    GENERATED_BODY()

    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Skill)
    FName SkillID;
    };

  2. I create a data table use that type FSkillData in edit,and add some data.
    3.open the table use cpp like
    UDataTable* SkillDataTable = LoadObject(this, TEXT(DEF_SKILL_DATA_PATH));
    TArray<FSkillData*> LoadSkillDataList;
    SkillDataTable->GetAllRows(TEXT(“LoadSkillDataTable”), LoadSkillDataList);

LoadSkillDataList is empty,
4.Use GetRowNames and FindRow function is ok. I can read all data.

My Question
I create FSkillData in cpp, but name type is SkillData in edit.
Are them the same type? Because GetAllRows will check the type.

I print this , and the type is SkillData.
SkillDataTable->GetRowStruct()->GetName();

Them should be the same type, but ue will refletion the FSkillData.

Plz help with this, fight half day for this question.