The default constructor and FObjectInitializer constructor

There is no default constructor in ANavModifierVolume

ANavModifierVolume.h
class NAVIGATIONSYSTEM_API ANavModifierVolume : public AVolume, public INavRelevantInterface
{
GENERATED_BODY()

public:
ANavModifierVolume(const FObjectInitializer& ObjectInitializer);
}

ANavModifierVolume.cpp
ANavModifierVolume::ANavModifierVolume(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer), AreaClass(UNavArea_Null::StaticClass())
{
//Some code
}

And if I create a subclass of ANavModifierVolume

APathModifierVolume.h
class MYGAME_API APathModifierVolume: public ANavModifierVolume
{
GENERATED_BODY()

public:
APathModifierVolume();

explicit APathModifierVolume(const FObjectInitializer& ObjectInitializer);
}
APathModifierVolume.cpp
APathModifierVolume::APathModifierVolume()
{
}
APathModifierVolume::APathModifierVolume(const FObjectInitializer& ObjectInitializer)
:Super(ObjectInitializer)
{
}

And then I got errors.

error C2512:  'ANavModifierVolume': no appropriate default constructor available.
note: no constructor could take the source type or constructor overload resolution was ambiguous

If I remove the default constructor, everything works fine. But why? Why should I use FObjectInitializer constructor? And If I wanna use the default constructor, what should I do?

Can you default construct an FObjectInitializer to pass to the base class?

APathModifierVolume::APathModifierVolume() : Super(FObjectInitializer())
{
}
2 Likes

Wow, I wish I can see this earlier! Thanks for your solution!

2 Likes