Find an item of array in a user structure cause error C2678

Hello. I usually use blueprints, and while solving one of the solution, I ran into blueprint loops is so slow and decided to rewrite some of the functions in C ++ so that the project would work well even without navitization. But I ran into a problem and that’s why I came here to ask for your help.

The essence of the problem.
I’m trying to find the a component I need in the array of my structure (FSplineMeshCollisions) in the form of the element index with the .Find (Element) command, but the search gives me the error C2678. I have been stuck on this issue for the 2nd day. Searching in Google by Eror C2678 did not help me much. I also tried to investigate my bpuprint function by creating a C ++ file from it, but it helped me to solve the problem. Help me please.
I created the Cpp function as a Cpp Function Library for next calling it into blueprint.

SplineMeshControl.h

#pragma once

#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "Components/SplineMeshComponent.h"
#include "Components/BoxComponent.h"
#include "UObject/WeakObjectPtrTemplates.h"
#include "UObject/UObjectBase.h"
#include "UObject/UObjectBaseUtility.h"
#include "UObject/Object.h"
#include "Components/PrimitiveComponent.h"
#include "Components/SceneComponent.h"
#include "Kismet/KismetSystemLibrary.h"
#include "Templates/Casts.h"
#include "Containers/ContainerAllocationPolicies.h"
#include "GeneratedCodeHelpers.h"
#include "Containers/Array.h"
#include "SplineMeshControl.generated.h"

USTRUCT(BlueprintType)
struct FSplineMeshCollisions
{
    GENERATED_BODY()

        UPROPERTY(EditAnywhere, BlueprintReadWrite)
        USplineMeshComponent* SplineOwner;

    UPROPERTY(EditAnywhere, BlueprintReadWrite)
        TArray<UBoxComponent*> Collisions;
};

UCLASS()
class DIGGER_API USplineMeshControl : public UBlueprintFunctionLibrary
{
    GENERATED_BODY()
        UFUNCTION(BlueprintCallable, Category = "MySpline")
        static TArray<USplineMeshComponent*>  CheckSplineOverlaps_C(TArray<FSplineMeshCollisions> InputArray);
    static TArray<UPrimitiveComponent*> RemoveSelfAndCombinedComponents_C(TArray<UPrimitiveComponent*> InputComponentToProcess,FSplineMeshCollisions CurrentSplineCollision,TArray<FSplineMeshCollisions> FullColliisionArray);
    static TArray<USplineMeshComponent*> FindSplineMeshByOverlapedComponent_C(TArray<UPrimitiveComponent*> InputComponent, TArray<FSplineMeshCollisions> FullCollisionsArray);
};

SplineMeshControl.cpp

#include "SplineMeshControl.h"

TArray<UPrimitiveComponent*> USplineMeshControl::RemoveSelfAndCombinedComponents_C(TArray<UPrimitiveComponent*> InputComponentToProcess,FSplineMeshCollisions CurrentSplineCollision,TArray<FSplineMeshCollisions> FullColliisionArray)
{
	int32 FindedIndex;
	FindedIndex = FullColliisionArray.Find(CurrentSplineCollision);
	TArray<UPrimitiveComponent*> OutArray();
	TArray<UPrimitiveComponent*> ComponentToRemove{};
	if (FindedIndex != -1) {
		ComponentToRemove.Append(FullColliisionArray[FindedIndex - 1].Collisions);
		ComponentToRemove.Append(FullColliisionArray[FindedIndex].Collisions);
		ComponentToRemove.Append(FullColliisionArray[FindedIndex + 1].Collisions);
		for (uint16 RemoverCounter = 0; RemoverCounter < ComponentToRemove.Num(); RemoverCounter++) {
			OutArray().Remove(ComponentToRemove[RemoverCounter]);
		}
	}
	return TArray<UPrimitiveComponent*>(OutArray());
}

TArray<USplineMeshComponent*> USplineMeshControl::FindSplineMeshByOverlapedComponent_C(TArray<UPrimitiveComponent*> InputComponent, TArray<FSplineMeshCollisions> FullCollisionsArray)
{
	TArray<USplineMeshComponent*> OutSplineMeshes{};
	for (uint16 struct_counter = 0; struct_counter < FullCollisionsArray.Num(); struct_counter++) {
		for (uint16 collision_counter = 0; collision_counter < InputComponent.Num(); collision_counter++) {
			if ((FullCollisionsArray[struct_counter].Collisions.Find(Cast<UBoxComponent>(InputComponent[collision_counter]))) != -1) {
				OutSplineMeshes.AddUnique(FullCollisionsArray[struct_counter].SplineOwner);
			}
		}
	}
	return TArray<USplineMeshComponent*>(OutSplineMeshes);
}

TArray<USplineMeshComponent*> USplineMeshControl::CheckSplineOverlaps_C(TArray<FSplineMeshCollisions> InputArray)
{
	TArray<TEnumAsByte<EObjectTypeQuery>>CollisonQuery;
	CollisonQuery.SetNum(6, true);
	CollisonQuery[0] = EObjectTypeQuery::ObjectTypeQuery1;
	CollisonQuery[1] = EObjectTypeQuery::ObjectTypeQuery2;
	CollisonQuery[2] = EObjectTypeQuery::ObjectTypeQuery3;
	CollisonQuery[3] = EObjectTypeQuery::ObjectTypeQuery5;
	CollisonQuery[4] = EObjectTypeQuery::ObjectTypeQuery4;
	CollisonQuery[5] = EObjectTypeQuery::ObjectTypeQuery12;
	TArray<UBoxComponent*> TempBoxCollisions;
	TArray<UPrimitiveComponent*> OverlapedCollisions{};
	TArray<AActor*> ActorToIgnore{};
	TArray<UPrimitiveComponent*> RightOverlapedComponents{};
	TArray<USplineMeshComponent*> OverlapedSplineMeshes{};

	for (int struct_counter = 0; struct_counter < InputArray.Num(); struct_counter++) {
		TempBoxCollisions = InputArray[struct_counter].Collisions;
		for (int collision_counter = 0; collision_counter < TempBoxCollisions.Num(); collision_counter++) {
			if (IsValid(TempBoxCollisions[collision_counter])) {
				FTransform CollisionTransform = TempBoxCollisions[collision_counter]->GetComponentTransform();
				UKismetSystemLibrary::ComponentOverlapComponents(TempBoxCollisions[collision_counter], CollisionTransform, CollisonQuery, NULL, ActorToIgnore, OverlapedCollisions);
				if (OverlapedCollisions.Num() != 0) {
					RightOverlapedComponents = RemoveSelfAndCombinedComponents_C(OverlapedCollisions, InputArray[struct_counter], InputArray);
					if (RightOverlapedComponents.Num() > 0) {
						OverlapedSplineMeshes = FindSplineMeshByOverlapedComponent_C(RightOverlapedComponents, InputArray);
					}
				}
			}
		}
	}
	return TArray<USplineMeshComponent*>(OverlapedSplineMeshes);
}

The error is caused by

FindedIndex = FullColliisionArray.Find(CurrentSplineCollision);

I also think this action will also cause an error.

if ((FullCollisionsArray[struct_counter].Collisions.Find(Cast<UBoxComponent>(InputComponent[collision_counter]))) != -1) {

UE4 Error while compiling:
C:\Development\Engine\UE_4.26\Engine\Source\Runtime\Core\Public\Containers/Array.h(862) : error C2678: ??? “==”: ?? ??? ???, ?ਭ???騩 ??? ???࠭? ⨯? “const FSplineMeshCollisions” (??? ?ਥ??? ?८?ࠧ??? ???)

I also tried to add an operator after the structure as Steve Robb wrote about it in the subject:https://answers.unrealengine.com/questions/327390/view.html. But it started to cause such errors.

 ????????? ??????⥪? C:\Development\Develop\Digger\Digger 4.26\Intermediate\Build\Win64\UE4Editor\Development\Digger\UE4Editor-Digger-5619.lib ? ??ꥪ? C:\Development\Develop\Digger\Digger 4.26\Intermediate\Build\Win64\UE4Editor\Development\Digger\UE4Editor-Digger-5619.exp
  [5/6] UE4Editor-Digger-5619.dll
     ????????? ??????⥪? C:\Development\Develop\Digger\Digger 4.26\Intermediate\Build\Win64\UE4Editor\Development\Digger\UE4Editor-Digger-5619.suppressed.lib ? ??ꥪ? C:\Development\Develop\Digger\Digger 4.26\Intermediate\Build\Win64\UE4Editor\Development\Digger\UE4Editor-Digger-5619.suppressed.exp
  SplineMeshControl.cpp.obj : error LNK2019: ??뫪? ?? ??ࠧ??襭??? ???譨? ᨬ??? "bool __cdecl operator==(struct FSplineMeshCollisions const &,struct FSplineMeshCollisions const &)" (??8@YA_NAEBUFSplineMeshCollisions@@0@Z) ? ?㭪樨 "private: static class TArray<class UPrimitiveComponent *,class TSizedDefaultAllocator<32> > __cdecl USplineMeshControl::RemoveSelfAndCombinedComponents_C(class TArray<class UPrimitiveComponent *,class TSizedDefaultAllocator<32> >,struct FSplineMeshCollisions,class TArray<struct FSplineMeshCollisions,class TSizedDefaultAllocator<32> >)" (?RemoveSelfAndCombinedComponents_C@USplineMeshControl@@CA?AV?$TArray@PEAVUPrimitiveComponent@@V?$TSizedDefaultAllocator@$0CA@@@@@V2@UFSplineMeshCollisions@@V?$TArray@UFSplineMeshCollisions@@V?$TSizedDefaultAllocator@$0CA@@@@@@Z).
  SplineMeshControl.cpp.obj : error LNK2019: ??뫪? ?? ??ࠧ??襭??? ???譨? ᨬ??? "class TArray<class UPrimitiveComponent *,class TSizedDefaultAllocator<32> > __cdecl OutArray(void)" (?OutArray@@YA?AV?$TArray@PEAVUPrimitiveComponent@@V?$TSizedDefaultAllocator@$0CA@@@@@XZ) ? ?㭪樨 "private: static class TArray<class UPrimitiveComponent *,class TSizedDefaultAllocator<32> > __cdecl USplineMeshControl::RemoveSelfAndCombinedComponents_C(class TArray<class UPrimitiveComponent *,class TSizedDefaultAllocator<32> >,struct FSplineMeshCollisions,class TArray<struct FSplineMeshCollisions,class TSizedDefaultAllocator<32> >)" (?RemoveSelfAndCombinedComponents_C@USplineMeshControl@@CA?AV?$TArray@PEAVUPrimitiveComponent@@V?$TSizedDefaultAllocator@$0CA@@@@@V2@UFSplineMeshCollisions@@V?$TArray@UFSplineMeshCollisions@@V?$TSizedDefaultAllocator@$0CA@@@@@@Z).
  C:\Development\Develop\Digger\Digger 4.26\Binaries\Win64\UE4Editor-Digger-5619.dll : fatal error LNK1120: ??ࠧ??襭??? ???譨? ??????⮢: 2

The added operator looked like this:

...
USTRUCT(BlueprintType)
struct FSplineMeshCollisions
{
    GENERATED_BODY()

        UPROPERTY(EditAnywhere, BlueprintReadWrite)
        USplineMeshComponent* SplineOwner;

    UPROPERTY(EditAnywhere, BlueprintReadWrite)
        TArray<UBoxComponent*> Collisions;

};    
   bool operator==(const FSplineMeshCollisions&, const FSplineMeshCollisions&);
...

The problem is still relevant