Can't add C++ class of type "DestructibleActor" in 4.9

I’m running on a fresh win7 install, a fresh 4.9 release branch pulled off git today. I load up a blank project and try to add a c++ class of the type DestructibleActor and hot reload breaks… looking at the output log

1>TestDA.cpp.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl ADestructibleActor::PostEditChangeProperty(struct FPropertyChangedEvent &)" (?PostEditChangeProperty@ADestructibleActor@@UEAAXAEAUFPropertyChangedEvent@@@Z)
1>FirstProjectTest.generated.cpp.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl ADestructibleActor::PostEditChangeProperty(struct FPropertyChangedEvent &)" (?PostEditChangeProperty@ADestructibleActor@@UEAAXAEAUFPropertyChangedEvent@@@Z)
1>TestDA.cpp.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl ADestructibleActor::PostLoad(void)" (?PostLoad@ADestructibleActor@@UEAAXXZ)
1>FirstProjectTest.generated.cpp.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl ADestructibleActor::PostLoad(void)" (?PostLoad@ADestructibleActor@@UEAAXXZ)
1>C:\Users\dcyoung\Documents\Unreal Projects\FirstProjectTest\Binaries\Win64\UE4Editor-FirstProjectTest.dll : fatal error LNK1120: 2 unresolved externals

I tried regenerating visual studio project files and manually creating the source files as well. Neither worked

EDIT:
The closest post I’ve found dealing with this issue is the following (regarding APointLight, instead of ADestructibleActor):

The provided solution was:

tag the function in APointLight with ENGINE_API

Could someone elaborate on what this means?

EDIT #2:
I also found this…

which seems to elaborate the change. I’m trying it now. I’m confused why destructible actors would be set by default to not be inheritable.

This might be because you’ve got some function declarations, but not the definitions.

You’ll need to write some definitions for the virtual functions: PostEditChangeProperty and PostLoad

the methods are already part of the base class (DestructibleActor)… i tried overriding them again and simply calling Super::PostEditChangeProperty inside the method but I received the exact same error log. This issue seems to be only with destructible actors, as other c++ classes can be created without error. This also was never an issue in previous versions of the engine.

Messing with the engine code (DestructibleActor.h) fixed the issue… very strange that this change was necessary though. If someone knows of a solution not involving changing engine code I’d like to hear it.

hello dcyoung…

So all you are supposed to do is override both of these methods and NOT call the Super::PostEditChangeProperty / Super::PostLoad …

The Class ADestructibleActor wants you to override these functions and also write the implementation (and not call the Super class implementation) as there is a keyword ‘override’ written there in base class

Hello
It’s a bit hacky, but, it works for me.
The trick is to define the functions by ourselves, letting them empty.
Put this into your .cpp file :

void ADestructibleActor::PostEditChangeProperty(struct FPropertyChangedEvent& Prop)
{
	Super::PostEditChangeProperty(Prop);
}

void ADestructibleActor::PostLoad()
{
	Super::PostLoad();
}