Cross-dependent structure exposed to Blueprints

I’m trying to implement a cross-dependent structure like the one below. The problem with this code is UPROPERTY that’s used above FDialogueNode* ReplyNode. If one would exclude that line, this code would compile fine, however this property would not be exposed to Blueprint system.

struct FDialogueNode;

USTRUCT(BlueprintType)
struct FDialogueReply
{
	GENERATED_BODY()

	UPROPERTY(BlueprintReadWrite)
	FText ReplyText;
	UPROPERTY(BlueprintReadWrite)
	FDialogueNode* ReplyNode;
};

USTRUCT(BlueprintType)
struct FDialogueNode
{
	GENERATED_BODY()

	UPROPERTY(BlueprintReadWrite)
	TArray<FText> Lines; 
	UPROPERTY(BlueprintReadWrite)
	TArray<FDialogueReply> Replies;
};

An alternative to the solution attempted above would be to remote the FDialogueReply struct and use a TMap<FText, *FDialogueNode>. However this is not allowed as well, both solutions would not compile, as I’m trying to use an undefined type.

How would I structure this to achieve the effect of, basically, a multi-linked list of sorts? Aside from using something like an ID field, which I don’t think is elegant.

Only UObject exist up in the air and be referenced, UE4 don’t track existence of structure it more like custom type of some sorts. This is not just problem with BT side but also C++ as if you delete pointed structure you gonna have invalid pointers.

Doing IDs one way… making actual UObjects for those is also a solution, this is how UE4 deals with nodes in graph-based assets, look up UEdGraphNode. If you making asset type, the default serialization will save referenced non-asset UObjects too and oyu always have option to make your own serialization.

Thank you, I have dealt with by experimenting around. I haven’t realized there are certain limitations associated with structs, upon constructing something similar with a UObject’s instead it turned out to be trivial.