Inheriting from AChaosSolverActor with a custom class - why can't I link to the external symbols of the pure virtual functions?

I must be too tired or something, but for the life of me I can’t figure out how to link a simple inheriting class AMyChaosSolverActor?

I always get linking errors such as when I call the base class functions:

error LNK2019: unresolved external symbol "public: virtual void __cdecl AChaosSolverActor::BuildSimulationProxy(void)" (?BuildSimulationProxy@AChaosSolverActor@@UEAAXXZ) referenced in function "public: virtual void __cdecl AMyChaosSolverActor::BuildSimulationProxy(void)" (?BuildSimulationProxy@AMyChaosSolverActor@@UEAAXXZ)

MyChaosSolverActor.h:

#pragma once

#include "CoreMinimal.h"
#include "Chaos/ChaosSolverActor.h"
#include "MyChaosSolverActor.generated.h"

/**
 * 
 */
UCLASS()
class CHAOSCPPTESTS_API AMyChaosSolverActor : public AChaosSolverActor
{
	GENERATED_BODY()
	
public:
    // Required virtual function implementations
    virtual void BuildSimulationProxy() override;
    virtual void ResetSimulationProxy() override;
    virtual void WriteToSimulation(float DeltaTime, bool bAsyncTask) override;
    virtual void ReadFromSimulation(float DeltaTime, bool bAsyncTask) override;

    // Required by IDataflowSimulationInterface
    virtual void PreProcessSimulation(float DeltaTime) override;
    virtual void PostProcessSimulation(float DeltaTime) override;

    // Required by IDataflowPhysicsSolverInterface
    virtual FString GetSimulationType() const override;
};

MyChaosSolverActor.cpp:

#include "MyChaosSolverActor.h"

#include "Chaos/ChaosSolverActor.h"

void AMyChaosSolverActor::BuildSimulationProxy()
{
    Super::BuildSimulationProxy(); // <-- Super call causing link error
}

void AMyChaosSolverActor::ResetSimulationProxy()
{
}

void AMyChaosSolverActor::WriteToSimulation(float DeltaTime, bool bAsyncTask)
{
}

void AMyChaosSolverActor::ReadFromSimulation(float DeltaTime, bool bAsyncTask)
{
}

void AMyChaosSolverActor::PreProcessSimulation(float DeltaTime)
{
}

void AMyChaosSolverActor::PostProcessSimulation(float DeltaTime)
{
}

FString AMyChaosSolverActor::GetSimulationType() const
{
    return FString(TEXT("CustomChaosSolver"));
}

Build.cs:

using UnrealBuildTool;

public class ChaosCPPTests : ModuleRules
{
	public ChaosCPPTests(ReadOnlyTargetRules Target) : base(Target)
	{
		PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
	
		PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "EnhancedInput", "ChaosSolverEngine" });

		PrivateDependencyModuleNames.AddRange(new string[] {  });
	}
}

Thanks a lot for you help, and sorry if I missed something basic.

To save you some time:

ChaosSolverActor.h:

~~~~
	//~ Begin IDataflowPhysicsSolverInterface interface
	virtual FString GetSimulationName() const override {return GetName();};
	virtual FDataflowSimulationAsset& GetSimulationAsset() override {return SimulationAsset;};
	virtual const FDataflowSimulationAsset& GetSimulationAsset() const override {return SimulationAsset;};
	virtual FDataflowSimulationProxy* GetSimulationProxy() override {return &RigidSolverProxy;}
	virtual const FDataflowSimulationProxy* GetSimulationProxy() const  override {return &RigidSolverProxy;}
	virtual void BuildSimulationProxy() override;
	virtual void ResetSimulationProxy() override;
	virtual void WriteToSimulation(const float DeltaTime, const bool bAsyncTask) override;
	virtual void ReadFromSimulation(const float DeltaTime, const bool bAsyncTask) override;
	//~ End IDataflowPhysicsSolverInterface interface
~~~~

The method BuildSimulationProxy() is implemented by ChaosSolverActor.

Not sure if you copied over the rest of the overrides from your last message.

Adding this to the header, copied over from AChaosSolverActor into AMyChaosSolverActor gives a successful compile

    virtual FString GetSimulationName() const override { return GetName(); };
    virtual FDataflowSimulationAsset& GetSimulationAsset() override { return SimulationAsset; };
    virtual const FDataflowSimulationAsset& GetSimulationAsset() const override { return SimulationAsset; };
    virtual FDataflowSimulationProxy* GetSimulationProxy() override { return &RigidSolverProxy; }
    virtual const FDataflowSimulationProxy* GetSimulationProxy() const  override { return &RigidSolverProxy; }

MyChaosSolverActor.h (1.4 KB)
MyChaosSolverActor.cpp (744 Bytes)