Compilation Custom Pawn

Hi all,

I try do create a custom pawn extension Class into my module

Source/DxyzPrevizClientModule/Classes/DxyzPawn.h

enter code here
#pragma once

#include "GameFramework/Pawn.h"
#include "DxyzPawn.generated.h"


USTRUCT()
struct FacialController
{
	GENERATED_USTRUCT_BODY()

	UPROPERTY()
	uint32                    type;
	/*SkelControlSingleBone   node;
	MorphNodePose           morph;*/
};

UCLASS(config = Game)
class ADxyzPawn : public APawn
{
	GENERATED_UCLASS_BODY()


	/*
	public:

	virtual void initSingleBoneControllers(TArray<int> types, TArray<string> names) = 0;
	virtual void updateSingleBoneControllers(TArray<float> floats) = 0;


	public:

	virtual ~ADxyzPawn ( ) { }

	*/
protected:

	TArray<FacialController>    fControllers;
};

Source/DxyzPrevizClientModule/Private/DxyzPawn.cpp

// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved.

#include "DxyzPrevizClientModulePrivatePCH.h"


ADxyzPawn::ADxyzPawn(const class FPostConstructInitializeProperties& PCIP)
: Super(PCIP)
{
	
}

Source/DxyzPrevizClientModule/Private/DxyzPrevizClientModulePrivatePCH.h

// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved.

#include "../Public/DxyzPrevizClientModule.h"

/* Private Dependencies
 *****************************************************************************/

#include "Core.h"
#include "ModuleManager.h"
#include "Settings.h"
#include "Sockets.h"
#include "SocketSubsystem.h"
#include "CoreUObject.h"

/* Private Constants
 *****************************************************************************/

/**
 * Defines the default Grabber's animation coefficients server settings.
 */
#define DXYZ_ANIM_COEFF_SERVER_SETTINGS FIPv4Endpoint(FIPv4Address(127, 0, 0, 1), 5559)


/* Private includes
 *****************************************************************************/
#include "DxyzPrevizClientSettings.h"
#include "DxyzPrevizClient.h"
#include "DxyzPawn.h"

Source/DxyzPrevizClientModule/DxyzPrevizClientModule.Build.cs

// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved.
using System.IO;

namespace UnrealBuildTool.Rules
{
	public class DxyzPrevizClientModule : ModuleRules
	{

        private string ModulePath
        {
            get { return Path.GetDirectoryName(RulesCompiler.GetModuleFilename(this.GetType().Name)); }
        }

        private string ThirdPartyPath
        {
            get { return Path.GetFullPath(Path.Combine(ModulePath, "../../ThirdParty/")); }
        }

        //constructor
		public DxyzPrevizClientModule(TargetInfo Target)
		{
			PublicDependencyModuleNames.AddRange(
				new string[]
				{
					"Networking"
				}
			); 

			PrivateDependencyModuleNames.AddRange(
				new string[] {
					"Core",
                    "Engine",
					"CoreUObject",
					"Sockets"
                
				}
			);

			PrivateIncludePathModuleNames.AddRange(
				new string[] {
					"Settings",
				}
			);

			PrivateIncludePaths.AddRange(
				new string[] {
					"DxyzPrevizClientModule/Private"
				}
			);

            LoadTinyXML(Target);

		}


        public bool LoadTinyXML(TargetInfo Target)
        {
            bool isLibrarySupported = false;

            if ((Target.Platform == UnrealTargetPlatform.Win64) || (Target.Platform == UnrealTargetPlatform.Win32))
            {
                isLibrarySupported = true;

                string PlatformString = (Target.Platform == UnrealTargetPlatform.Win64) ? "x64" : "x86";
                string LibrariesPath = Path.Combine(ThirdPartyPath, "tinyxml", "Libraries");

                PublicAdditionalLibraries.Add(Path.Combine(LibrariesPath, "tinyxml." + PlatformString + ".lib"));
            }

            if (isLibrarySupported)
            {
                // Include path
                PublicIncludePaths.Add(Path.Combine(ThirdPartyPath, "tinyxml", "Includes"));
            }

            Definitions.Add(string.Format("WITH_TINY_XML_BINDING={0}", isLibrarySupported ? 1 : 0));

            return isLibrarySupported;
        }

	}
}

When I try compile, I get this compilation error :

1>c:\program files\unreal engine\4.2\engine\source\runtime\engine\classes\gameframework\PawnMovementComponent.h(12): error C2504: 'UNavMovementComponent' : base class undefined
1>c:\program files\unreal engine\4.2\engine\source\runtime\engine\classes\gameframework\PawnMovementComponent.h(13): error C2146: syntax error : missing ';' before identifier 'Super'
1>c:\program files\unreal engine\4.2\engine\source\runtime\engine\classes\gameframework\PawnMovementComponent.h(13): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\program files\unreal engine\4.2\engine\source\runtime\engine\classes\gameframework\PawnMovementComponent.h(16): error C3668: 'UPawnMovementComponent::SetUpdatedComponent' : method with override specifier 'override' did not override any base class methods
1>c:\program files\unreal engine\4.2\engine\source\runtime\engine\classes\gameframework\PawnMovementComponent.h(19): error C3668: 'UPawnMovementComponent::StopMovementImmediately' : method with override specifier 'override' did not override any base class methods
1>c:\program files\unreal engine\4.2\engine\source\runtime\engine\classes\gameframework\PawnMovementComponent.h(66): error C2653: 'Super' : is not a class or namespace name
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(15): error C2504: 'AActor' : base class undefined
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(16): error C2504: 'INavAgentInterface' : base class undefined
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(55): error C2653: 'EAutoReceiveInput' : is not a class or namespace name
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(55): error C2065: 'Type' : undeclared identifier
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(55): error C2923: 'TEnumAsByte' : 'Type' is not a valid template type argument for parameter 'TEnum'
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(180): error C2061: syntax error : identifier 'APlayerController'
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(182): error C2061: syntax error : identifier 'APlayerController'
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(185): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(185): error C2143: syntax error : missing ',' before '&'
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(17): error C3668: 'APawn::GetLifetimeReplicatedProps' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(145): error C3668: 'APawn::IsBasedOnActor' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(176): error C3668: 'APawn::GetVelocity' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(177): error C3668: 'APawn::Tick' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(178): error C3668: 'APawn::Reset' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(179): error C3668: 'APawn::GetHumanReadableName' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(180): error C3668: 'APawn::GetNetPriority' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(181): error C3668: 'APawn::ShouldTickIfViewportsOnly' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(182): error C3668: 'APawn::IsNetRelevantFor' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(183): error C3668: 'APawn::PostNetReceiveLocation' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(184): error C3668: 'APawn::PostNetReceiveVelocity' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(185): error C3668: 'APawn::DisplayDebug' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(186): error C3668: 'APawn::GetActorEyesViewPoint' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(187): error C3668: 'APawn::OutsideWorldBounds' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(188): error C3668: 'APawn::Destroyed' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(189): error C3668: 'APawn::PreInitializeComponents' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(190): error C3668: 'APawn::PostInitializeComponents' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(191): error C3668: 'APawn::GetNetOwningPlayer' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(192): error C3668: 'APawn::GetNetConnection' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(193): error C3668: 'APawn::PostInitProperties' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(194): error C3668: 'APawn::PostLoad' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(195): error C3668: 'APawn::PostRegisterAllComponents' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(196): error C3668: 'APawn::TakeDamage' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(197): error C3668: 'APawn::BecomeViewTarget' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(198): error C3668: 'APawn::UpdateNavigationRelevancy' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(199): error C3668: 'APawn::EnableInput' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(200): error C3668: 'APawn::DisableInput' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(203): error C3668: 'APawn::CanBeBaseForCharacter' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(207): error C3668: 'APawn::GetNavAgentProperties' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(210): error C3668: 'APawn::GetNavAgentLocation' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(211): error C3668: 'APawn::GetMoveGoalReachTest' : method with override specifier 'override' did not override any base class methods
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(17): error C2440: 'return' : cannot convert from 'APawn *const ' to 'UObject *'
1>          Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(17): error C2440: 'return' : cannot convert from 'const APawn *const ' to 'const UObject *'
1>          Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(181): error C2665: 'Cast' : none of the 3 overloads could convert all the argument types
1>          C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\CoreUObject\Public\Templates\Casts.h(100): could be 'const T *Cast<APlayerController>(const UObject *)'
1>          with
1>          [
1>              T=APlayerController
1>          ]
1>          C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\CoreUObject\Public\Templates\Casts.h(56): or       'T *Cast<APlayerController>(const FSubobjectPtr &)'
1>          with
1>          [
1>              T=APlayerController
1>          ]
1>          C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\CoreUObject\Public\Templates\Casts.h(12): or       'T *Cast<APlayerController>(UObject *)'
1>          with
1>          [
1>              T=APlayerController
1>          ]
1>          while trying to match the argument list '(AController *)'
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(198): error C3861: 'SetNavigationRelevancy': identifier not found
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(207): error C2039: 'GetNavAgentProperties' : is not a member of 'UPawnMovementComponent'
1>          c:\program files\unreal engine\4.2\engine\source\runtime\engine\classes\gameframework\PawnMovementComponent.h(11) : see declaration of 'UPawnMovementComponent'
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(210): error C3861: 'GetActorLocation': identifier not found
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(334): error C2065: 'FindComponentByClass' : undeclared identifier
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(334): error C2275: 'UPawnMovementComponent' : illegal use of this type as an expression
1>          c:\program files\unreal engine\4.2\engine\source\runtime\engine\classes\gameframework\PawnMovementComponent.h(11) : see declaration of 'UPawnMovementComponent'
1>C:\Program Files\Unreal Engine\4.2\Engine\Source\Runtime\Engine\Classes\GameFramework/Pawn.h(334): error C2059: syntax error : ')'
1>  -------- End Detailed Actions Stats -----------------------------------------------------------
1>ERROR : UBT error : Failed to produce item: C:\Users\Dynamixyz\Documents\Unreal Projects\DemoDxyzPlugins\Plugins\DxyzPrevizClientModule\Binaries\Win64\UE4Editor-DxyzPrevizClientModule.dll
1>  Cumulative action seconds (8 processors): 0.00 building projects, 6.90 compiling, 0.00 creating app bundles, 0.00 generating debug info, 0.00 linking, 0.00 other
1>  UBT execution time: 11.19 seconds
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.MakeFile.Targets(43,5): error MSB3073: The command ""C:\Program Files\Unreal Engine\4.2\Engine\Build\BatchFiles\Rebuild.bat" DemoDxyzPluginsEditor Win64 Development "C:\Users\Dynamixyz\Documents\Unreal Projects\DemoDxyzPlugins\DemoDxyzPlugins.uproject" -rocket" exited with code 2.
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========

Anyone try this before ?

The problem is that you’re directly including Pawn.h, but Pawn.h isn’t safely setup to be included that way, and doesn’t pull in it’s prerequisites properly. We’re working on fixing this for the next release, but for now you can either include NavComponent and other classes directly in your own pawn header, or add Engine.h to your PCH header, which will pull in all the components but slow down your compile time.

I selected engine.h into PCH header. It’s working many thanks.