Confusing compile error in Blueprint component that can be compiled without problem

Using 4.9.1.

I’ve currently got a strange problem with two of my custom components in a C++/Blueprint project. Whenever I open the editor and attempt to start PIE mode, this fails with a warning about unresolved compile errors:

60691-unresolvedcompilererror.png

When I look at the files, the problem appears to be that the component does not get recognized as being of type UnitAbilityComponent_BP, despite this being an indirect parent class.

Compiling the Blueprint resolves all these errors, and afterwards I can play the game normally. Unfortunately, no matter what I do, as soon as I close and reopen the editor, the errors are back.

I’ve tried recompiling and force-saving all ability component blueprints, reparenting the affected blueprints (to their current, correct parent) and rebuilding the entire C++ project, but none of this had any effect.

The errors starting appearing after I added references to these ability components (all of them, not just the affected ones) to a DataTable, whose source struct is defined in UnitAbilityComponentBase.h.

USTRUCT( BlueprintType, Blueprintable, Category = "Combat" )
struct FCombatActionData : public FTableRowBase
{
	GENERATED_USTRUCT_BODY()

	UPROPERTY( VisibleAnywhere, BlueprintReadOnly, Category = "Combat" )
	TEnumAsByte<EActionType> ActionType;

	UPROPERTY( VisibleAnywhere, BlueprintReadOnly, Category = "Combat" )
	int32 MinDamage;

	UPROPERTY( VisibleAnywhere, BlueprintReadOnly, Category = "Combat" )
	float MaxDamageMultiplier;

	UPROPERTY( VisibleAnywhere, BlueprintReadOnly, Category = "Combat" )
	int32 AttackRange;

	UPROPERTY( VisibleAnywhere, BlueprintReadOnly, Category = "Combat" )
	float ChanceToHit;

	UPROPERTY( VisibleAnywhere, BlueprintReadOnly, Category = "Combat" )
	float CriticalHitChance;

	UPROPERTY( VisibleAnywhere, BlueprintReadOnly, Category = "Combat" )
	int32 AreaOfEffectRange;

	UPROPERTY( VisibleAnywhere, BlueprintReadOnly, Category = "Combat" )
	TEnumAsByte<ETargetType> TargetType;

	UPROPERTY( VisibleAnywhere, BlueprintReadOnly, Category = "Combat" )
	TSubclassOf<class UUnitAbilityComponentBase> AbilityClass;

	UPROPERTY( VisibleAnywhere, BlueprintReadOnly, Category = "Combat" )
	UMaterial* AbilityMat;
};

I don’t understand why that would result in these confusing pseudo-errors.

Since it’s possible to compile the classes and test the game normally, this is not a critical problem, but it’s very confusing. Help would be greatly appreciated!

Thanks in advance,

Here’s a graph showing the inheritance of the ability components:

As you can see there are other components at the same degree of separation from the parent that don’t show the issue, although all of them override the TryExecutingAction function defined in UnitAbilityComponent_BP.