Move to move forward when pressing left and right mouse button at the same time in c++?

I’m trying to get my player to move forward when I press te left and right mouse button in C++, but I don’t know how to code 2 buttons to be pressed at the same time in C++.
I can do it in Blueprint, so I know it is possible, but I want it in C++ for optimization.
In the Blueprint did I call the Left Mouse Button for LMB and the Right Mouse button for RMB and did set the value in the Project setting to 0.5.

Can someone please help me?

in your blueprints you ware using AXIS instead Action (buttons) anyway in C++ should be like this:

InputComponent->BindKey(EKeys::LeftMouseButton, IE_Pressed, this, &AYourActor::LeftButtonFunction);

you can put that in the beginplay of your actor with the other bindings)

LeftButtonFunction is the function you want to run when leftMouseButton is PRESSED

do the same for rightMouseButton and another binded function

same for release (IE_Released)

then you can have 2 bool variables: LMB and RMB…
in the pressed functions set the corresponding to true and in the release to false.

Then the condition is if (RMB && LMB) to add movement input

2 Likes

first I get an error in on the “BindKey” in the cpp file, how to I fix that?
Second, How do I set a bool in c++?

bool RMB;

I don’t know how is your code. And seems you don’t know C++
Why do you want to do this in C++?

Hello! As @eldany.uy suggested, you have to use a Pawn or Character inherited class, for this example I used AMyCharacter which inherits from ACharacter.

The header looks something like this

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "MyCharacter.generated.h"

UCLASS()
class TP_FIRSTPERSON_API AMyCharacter : public ACharacter
{
	GENERATED_BODY()

public:
	// Sets default values for this character's properties
	AMyCharacter();

protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;

	void OnLeftMouseButtonPressed();
	void OnLeftMouseButtonReleased();
	void OnRightMouseButtonPressed();
	void OnRightMouseButtonReleased();

	bool LeftMouseButtonIsBeingPressed;
	bool RightMouseButtonIsBeingPressed;

public:	
	// Called every frame
	virtual void Tick(float DeltaTime) override;

	// Called to bind functionality to input
	virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;

};

Then, you have to bind the action of pressing and releasing a mouse button to this functions we defined (OnLeftMouseButtonPressed(), OnLeftMouseButtonReleased(), OnRightMouseButtonPressed(), OnRightMouseButtonReleased()). We will do it on the SetupPlayerInputComponent function.

// Called to bind functionality to input
void AMyCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
	Super::SetupPlayerInputComponent(PlayerInputComponent);

	PlayerInputComponent->BindAction("LeftMouseButton", IE_Pressed, this, &AMyCharacter::OnLeftMouseButtonPressed);
	PlayerInputComponent->BindAction("LeftMouseButton", IE_Released, this, &AMyCharacter::OnLeftMouseButtonReleased);
	PlayerInputComponent->BindAction("RightMouseButton", IE_Pressed, this, &AMyCharacter::OnRightMouseButtonPressed);
	PlayerInputComponent->BindAction("RightMouseButton", IE_Released, this, &AMyCharacter::OnRightMouseButtonReleased);
}

If you notice, instead of using BindKey I’m using BindAction, I’ll tell you in a bit, what to do with that. After this, we have to define what will those functions actually do, and that is set as true or false the booleans we defined in the header (LeftMouseButtonIsBeingPressed, RightMouseButtonIsBeingPressed):

void AMyCharacter::OnLeftMouseButtonPressed()
{
	LeftMouseButtonIsBeingPressed = true;
}

void AMyCharacter::OnLeftMouseButtonReleased()
{
	LeftMouseButtonIsBeingPressed = false;
}

void AMyCharacter::OnRightMouseButtonPressed()
{
	RightMouseButtonIsBeingPressed = true;
}

void AMyCharacter::OnRightMouseButtonReleased()
{
	RightMouseButtonIsBeingPressed = false;
}

On the Tick, we will check if the left and right buttons are being pressed, and if they do, let’s move. (for this example I just set it to move on the actor forward vector)

void AMyCharacter::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

	if (LeftMouseButtonIsBeingPressed && RightMouseButtonIsBeingPressed)
	{
		AddMovementInput(GetActorForwardVector());
	}
}

Now if you followed my steps, it should compile and let you use the editor, once inside the Editor, go into project settings, Input, and into Action Mappings, press the “+” sign right next to it, then add the two inputs we told the cpp we had (LeftMouseButton and RightMouseButton), and finally make so that the LeftMouseButton gets called with the LeftMouseButton, and the same for the RightMouseButton.

3 Likes

I did try your code, but it gives me compiling errors,

Hera are my codes:
C++:

// Copyright Epic Games, Inc. All Rights Reserved.

#include "NOMCharacter.h"
#include "Camera/CameraComponent.h"
#include "Components/CapsuleComponent.h"
#include "Components/InputComponent.h"
#include "GameFramework/CharacterMovementComponent.h"
#include "GameFramework/Controller.h"
#include "GameFramework/SpringArmComponent.h"

//////////////////////////////////////////////////////////////////////////
// ANOMCharacter

ANOMCharacter::ANOMCharacter()
{
	// Set size for collision capsule
	GetCapsuleComponent()->InitCapsuleSize(42.f, 96.0f);

	// set our turn rate for input
	TurnRateGamepad = 50.f;

	// Don't rotate when the controller rotates. Let that just affect the camera.
	bUseControllerRotationPitch = false;
	bUseControllerRotationYaw = false;
	bUseControllerRotationRoll = false;

	// Configure character movement
	GetCharacterMovement()->bOrientRotationToMovement = true; // Character moves in the direction of input...	
	GetCharacterMovement()->RotationRate = FRotator(0.0f, 500.0f, 0.0f); // ...at this rotation rate

	// Note: For faster iteration times these variables, and many more, can be tweaked in the Character Blueprint
	// instead of recompiling to adjust them
	GetCharacterMovement()->JumpZVelocity = 700.f;
	GetCharacterMovement()->AirControl = 0.35f;
	GetCharacterMovement()->MaxWalkSpeed = 500.f;
	GetCharacterMovement()->MinAnalogWalkSpeed = 20.f;
	GetCharacterMovement()->BrakingDecelerationWalking = 2000.f;

	// Create a camera boom (pulls in towards the player if there is a collision)
	CameraBoom = CreateDefaultSubobject<USpringArmComponent>(TEXT("CameraBoom"));
	CameraBoom->SetupAttachment(RootComponent);
	CameraBoom->TargetArmLength = 400.0f; // The camera follows at this distance behind the character	
	CameraBoom->bUsePawnControlRotation = true; // Rotate the arm based on the controller

	// Create a follow camera
	FollowCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("FollowCamera"));
	FollowCamera->SetupAttachment(CameraBoom, USpringArmComponent::SocketName); // Attach the camera to the end of the boom and let the boom adjust to match the controller orientation
	FollowCamera->bUsePawnControlRotation = false; // Camera does not rotate relative to arm

	// Note: The skeletal mesh and anim blueprint references on the Mesh component (inherited from Character) 
	// are set in the derived blueprint asset named ThirdPersonCharacter (to avoid direct content references in C++)
}

////////
// Input

void ANOMCharacter::SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent)
{
	// Set up gameplay key bindings
	check(PlayerInputComponent);
	PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &ACharacter::Jump);
	PlayerInputComponent->BindAction("Jump", IE_Released, this, &ACharacter::StopJumping);

	PlayerInputComponent->BindAxis("M_U1", this, &ANOMCharacter::Move_Y);
	PlayerInputComponent->BindAxis("M_U2", this, &ANOMCharacter::Move_Y);
	PlayerInputComponent->BindAxis("M_D1", this, &ANOMCharacter::Move_Y);
	PlayerInputComponent->BindAxis("M_D2", this, &ANOMCharacter::Move_Y);

	PlayerInputComponent->BindAxis("M_L1", this, &ANOMCharacter::Move_X);
	PlayerInputComponent->BindAxis("M_L2", this, &ANOMCharacter::Move_X);
	PlayerInputComponent->BindAxis("M_R1", this, &ANOMCharacter::Move_X);
	PlayerInputComponent->BindAxis("M_R2", this, &ANOMCharacter::Move_X);


	// We have 2 versions of the rotation bindings to handle different kinds of devices differently
	// "turn" handles devices that provide an absolute delta, such as a mouse.
	// "turnrate" is for devices that we choose to treat as a rate of change, such as an analog joystick
	PlayerInputComponent->BindAxis("Turn Right / Left Mouse", this, &APawn::AddControllerYawInput);
	PlayerInputComponent->BindAxis("Turn Right / Left Gamepad", this, &ANOMCharacter::TurnAtRate);
	PlayerInputComponent->BindAxis("Look Up / Down Mouse", this, &APawn::AddControllerPitchInput);
	PlayerInputComponent->BindAxis("Look Up / Down Gamepad", this, &ANOMCharacter::LookUpAtRate);

	// handle touch devices
	//PlayerInputComponent->BindTouch(IE_Pressed, this, &ANOMCharacter::TouchStarted);
	//PlayerInputComponent->BindTouch(IE_Released, this, &ANOMCharacter::TouchStopped);
}

void ANOMCharacter::BeginPlay()
{
	Super::BeginPlay();

	InputComponent->BindKey(EKeys::LeftMouseButton, IE_Pressed, this, &ANOMCharacter::OnLeftMouseButtonPressed);
	InputComponent->BindKey(EKeys::LeftMouseButton, IE_Released, this, &ANOMCharacter::OnLeftMouseButtonReleased);
	InputComponent->BindKey(EKeys::RightMouseButton, IE_Pressed, this, &ANOMCharacter::OnRightMouseButtonPressed);
	InputComponent->BindKey(EKeys::RightMouseButton, IE_Released, this, &ANOMCharacter::OnRightMouseButtonReleased);


}


void ANOMCharacter::OnLeftMouseButtonPressed()
{
	LeftMouseButtonIsBeingPressed = true;
}

void ANOMCharacter::OnLeftMouseButtonReleased()
{
	LeftMouseButtonIsBeingPressed = false;
}

void ANOMCharacter::OnRightMouseButtonPressed()
{
	RightMouseButtonIsBeingPressed = true;
}

void ANOMCharacter::OnRightMouseButtonReleased()
{
	RightMouseButtonIsBeingPressed = false;
}

void ANOMCharacter::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

	if (LeftMouseButtonIsBeingPressed && RightMouseButtonIsBeingPressed)
	{
		AddMovementInput(GetActorForwardVector());
	}
}

void ANOMCharacter::TouchStarted(ETouchIndex::Type FingerIndex, FVector Location)
{
	Jump();
}

void ANOMCharacter::TouchStopped(ETouchIndex::Type FingerIndex, FVector Location)
{
	StopJumping();
}

void ANOMCharacter::TurnAtRate(float Rate)
{
	// calculate delta for this frame from the rate information
	AddControllerYawInput(Rate * TurnRateGamepad * GetWorld()->GetDeltaSeconds());
}

void ANOMCharacter::LookUpAtRate(float Rate)
{
	// calculate delta for this frame from the rate information
	AddControllerPitchInput(Rate * TurnRateGamepad * GetWorld()->GetDeltaSeconds());
}

void ANOMCharacter::Move_Y(float Value)
{
	if ((Controller != nullptr) && (Value != 0.0f))
	{
		// find out which way is forward
		const FRotator Rotation = Controller->GetControlRotation();
		const FRotator YawRotation(0, Rotation.Yaw, 0);

		// get forward vector
		const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X);
		AddMovementInput(Direction, Value);
	}
}

void ANOMCharacter::Move_X(float Value)
{
	if ((Controller != nullptr) && (Value != 0.0f))
	{
		// find out which way is right
		const FRotator Rotation = Controller->GetControlRotation();
		const FRotator YawRotation(0, Rotation.Yaw, 0);

		// get right vector 
		const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y);
		// add movement in that direction
		AddMovementInput(Direction, Value);
	}
}

H:

// Copyright Epic Games, Inc. All Rights Reserved.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "NOMCharacter.generated.h"

UCLASS(config = Game)
class ANOMCharacter : public ACharacter
{
	GENERATED_BODY()

	/** Camera boom positioning the camera behind the character */
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true"))
	class USpringArmComponent* CameraBoom;

	/** Follow camera */
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true"))
	class UCameraComponent* FollowCamera;

public:
	ANOMCharacter();

	/** Base turn rate, in deg/sec. Other scaling may affect final turn rate. */
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Input)
		float TurnRateGamepad;

	virtual void Tick(float DeltaTime) override;

	virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;

protected:

	// APawn interface
	//virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
	// End of APawn interface

	virtual void BeginPlay() override;

	void OnLeftMouseButtonPressed();
	void OnLeftMouseButtonReleased();
	void OnRightMouseButtonPressed();
	void OnRightMouseButtonReleased();

	bool LeftMouseButtonIsBeingPressed;
	bool RightMouseButtonIsBeingPressed;


	/** Called for forwards/backward input */
	void Move_Y(float Value);

	/** Called for side to side input */
	void Move_X(float Value);


	/**
	 * Called via input to turn at a given rate.
	 * @param Rate	This is a normalized rate, i.e. 1.0 means 100% of desired turn rate
	 */
	void TurnAtRate(float Rate);

	/**
	 * Called via input to turn look up/down at a given rate.
	 * @param Rate	This is a normalized rate, i.e. 1.0 means 100% of desired turn rate
	 */
	void LookUpAtRate(float Rate);

	/** Handler for when a touch input begins. */
	void TouchStarted(ETouchIndex::Type FingerIndex, FVector Location);

	/** Handler for when a touch input stops. */
	void TouchStopped(ETouchIndex::Type FingerIndex, FVector Location);

public:


	/** Returns CameraBoom subobject **/
	FORCEINLINE class USpringArmComponent* GetCameraBoom() const { return CameraBoom; }
	/** Returns FollowCamera subobject **/
	FORCEINLINE class UCameraComponent* GetFollowCamera() const { return FollowCamera; }
};

with the folowing errors:

Severity Code Description Project File Line Suppression State
Error (active) E1455 member function declared with ‘override’ does not override a base class member NOM D:\Epic Games\Epic Games\UE\UE_5.0\UE_5.0\Engine\Source\Runtime\CoreUObject\Public\UObject\CoreNet.h 388
Error (active) E1455 member function declared with ‘override’ does not override a base class member NOM D:\Epic Games\Epic Games\UE\UE_5.0\UE_5.0\Engine\Source\Runtime\CoreUObject\Public\UObject\CoreNet.h 360
Error (active) E1455 member function declared with ‘override’ does not override a base class member NOM D:\Epic Games\Epic Games\UE\UE_5.0\UE_5.0\Engine\Source\Runtime\CoreUObject\Public\UObject\CoreNet.h 361
Error (active) E1455 member function declared with ‘override’ does not override a base class member NOM D:\Epic Games\Epic Games\UE\UE_5.0\UE_5.0\Engine\Source\Runtime\CoreUObject\Public\UObject\CoreNet.h 362
Error (active) E1455 member function declared with ‘override’ does not override a base class member NOM D:\Epic Games\Epic Games\UE\UE_5.0\UE_5.0\Engine\Source\Runtime\CoreUObject\Public\UObject\CoreNet.h 363
Error (active) E1455 member function declared with ‘override’ does not override a base class member NOM D:\Epic Games\Epic Games\UE\UE_5.0\UE_5.0\Engine\Source\Runtime\CoreUObject\Public\UObject\CoreNet.h 389
Error (active) E1455 member function declared with ‘override’ does not override a base class member NOM D:\Epic Games\Epic Games\UE\UE_5.0\UE_5.0\Engine\Source\Runtime\CoreUObject\Public\UObject\CoreNet.h 390
Error (active) E1455 member function declared with ‘override’ does not override a base class member NOM D:\Epic Games\Epic Games\UE\UE_5.0\UE_5.0\Engine\Source\Runtime\CoreUObject\Public\UObject\CoreNet.h 391
Error (active) E0020 identifier IImageWrapperModule is undefined NOM D:\Epic Games\Epic Games\UE\UE_5.0\UE_5.0\Engine\Source\Runtime\Engine\Classes\Engine\Texture.h 490
Error (active) E0020 identifier IImageWrapperModule is undefined NOM D:\Epic Games\Epic Games\UE\UE_5.0\UE_5.0\Engine\Source\Runtime\Engine\Classes\Engine\Texture.h 492
Error LNK2019 unresolved external symbol __declspec(dllimport) public: __cdecl FInputChord::FInputChord(struct FKey,bool,bool,bool,bool) (_imp??0FInputChord@@QEAA@UFKey@@_N111@Z) referenced in function protected: virtual void __cdecl ANOMCharacter::BeginPlay(void) (?BeginPlay@ANOMCharacter@@MEAAXXZ) NOM E:\UE\5.0\NOM\Intermediate\ProjectFiles\NOMCharacter.cpp.obj 1
Error LNK2019 unresolved external symbol __declspec(dllimport) public: __cdecl FInputChord::FInputChord(struct FInputChord const &) (_imp??0FInputChord@@QEAA@AEBU0@@Z) referenced in function public: struct FInputKeyBinding & __cdecl UInputComponent::BindKey(struct FInputChord,enum EInputEvent,class ANOMCharacter ,void (__cdecl ANOMCharacter::)(void)) (??$BindKey@VANOMCharacter@@@UInputComponent@@QEAAAEAUFInputKeyBinding@@UFInputChord@@W4EInputEvent@@PEAVANOMCharacter@@P84@EAAXXZ@Z) NOM E:\UE\5.0\NOM\Intermediate\ProjectFiles\NOMCharacter.cpp.obj 1
Error LNK2019 unresolved external symbol __declspec(dllimport) public: __cdecl FInputChord::~FInputChord(void) (_imp??1FInputChord@@QEAA@XZ) referenced in function public: struct FInputKeyBinding & __cdecl UInputComponent::BindKey(struct FInputChord,enum EInputEvent,class ANOMCharacter ,void (__cdecl ANOMCharacter::)(void)) (??$BindKey@VANOMCharacter@@@UInputComponent@@QEAAAEAUFInputKeyBinding@@UFInputChord@@W4EInputEvent@@PEAVANOMCharacter@@P84@EAAXXZ@Z) NOM E:\UE\5.0\NOM\Intermediate\ProjectFiles\NOMCharacter.cpp.obj 1
Error LNK2001 unresolved external symbol public: __cdecl FInputChord::~FInputChord(void) (??1FInputChord@@QEAA@XZ) NOM E:\UE\5.0\NOM\Intermediate\ProjectFiles\NOMCharacter.cpp.obj 1
Error LNK1120 4 unresolved externals NOM E:\UE\5.0\NOM\Binaries\Win64\UnrealEditor-NOM-0003.dll 1
Error MSB3073 The command D:\Epic Games\Epic Games\UE\UE_5.0\UE_5.0\Engine\Build\BatchFiles\Build.bat NOMEditor Win64 Development -Project=E:\UE\5.0\NOM\NOM.uproject -WaitMutex -FromMsBuild exited with code 6. NOM D:\VS2022\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets 44

How do I fis the errors?

I had the same problem when trying to implement @eldany.uy answer, what I did was change the BindKey for BindAction, and instead of doing the bindings on the BeginPlay, I did it on the SetupPlayerInputComponent. I edited my previous response, you can check there if that solves those issues.

I used my code in my Player Controller like this:

InputComponent->BindKey(EKeys::Left, IE_Pressed,this,&AMyPlayerController_CPP::setLEFTOn).bExecuteWhenPaused=true;
	InputComponent->BindKey(EKeys::Left, IE_Released,this,&AMyPlayerController_CPP::setLEFTOff).bExecuteWhenPaused=true;
	InputComponent->BindKey(EKeys::Right, IE_Pressed,this,&AMyPlayerController_CPP::setRIGHTOn).bExecuteWhenPaused=true;
	InputComponent->BindKey(EKeys::Right, IE_Released,this,&AMyPlayerController_CPP::setRightOff).bExecuteWhenPaused=true;
	InputComponent->BindKey(EKeys::Up, IE_Pressed,this,&AMyPlayerController_CPP::setUPOn).bExecuteWhenPaused=true;
	InputComponent->BindKey(EKeys::Gamepad_DPad_Up, IE_Pressed,this,&AMyPlayerController_CPP::setUPOn).bExecuteWhenPaused=true;
	InputComponent->BindKey(EKeys::Up, IE_Released,this,&AMyPlayerController_CPP::setUPOff).bExecuteWhenPaused=true;
	InputComponent->BindKey(EKeys::Down, IE_Pressed,this,&AMyPlayerController_CPP::setDOWNOn).bExecuteWhenPaused=true;
	InputComponent->BindKey(EKeys::Gamepad_DPad_Down, IE_Pressed,this,&AMyPlayerController_CPP::setDOWNOn).bExecuteWhenPaused=true;
	InputComponent->BindKey(EKeys::Down, IE_Released,this,&AMyPlayerController_CPP::setDOWNOff).bExecuteWhenPaused=true;
	InputComponent->BindKey(EKeys::Android_Back, IE_Pressed,this,&AMyPlayerController_CPP::quitGame).bExecuteWhenPaused=true;
	InputComponent->BindKey(EKeys::K, IE_Pressed,this,&AMyPlayerController_CPP::quitGame).bExecuteWhenPaused=true;
	InputComponent->BindKey(EKeys::Q, IE_Pressed,this,&AMyPlayerController_CPP::quitGame);
	InputComponent->BindKey(EKeys::LeftMouseButton,IE_Released,this,&AMyPlayerController_CPP::releaseMouseButton).bExecuteWhenPaused=true;
	InputComponent->BindKey(EKeys::P, IE_Pressed,this,&AMyPlayerController_CPP::SetPauseBP).bExecuteWhenPaused = true;
	InputComponent->BindKey(EKeys::Gamepad_FaceButton_Bottom,IE_Pressed,this,&AMyPlayerController_CPP::SetPauseBP).bExecuteWhenPaused=true;

and worked flawless maybe is because of the UE version? I use 4.27

Oh I see…I am binding generic Inputs (prebuilt actions like A,B,C keys…) not ACTIONS defined in settings.

Sorry for that

I still can’t get it to work, and Visual Studio 2022 won’t tell me what is wrong

here are my codes again, Please tell me what I do wrong

cpp:

// Copyright Epic Games, Inc. All Rights Reserved.

#include "NOMCharacter.h"
#include "Camera/CameraComponent.h"
#include "Components/CapsuleComponent.h"
#include "Components/InputComponent.h"
#include "GameFramework/CharacterMovementComponent.h"
#include "GameFramework/Controller.h"
#include "GameFramework/SpringArmComponent.h"

//////////////////////////////////////////////////////////////////////////
// ANOMCharacter

ANOMCharacter::ANOMCharacter()
{
	// Set size for collision capsule
	GetCapsuleComponent()->InitCapsuleSize(42.f, 96.0f);

	// set our turn rate for input
	TurnRateGamepad = 50.f;

	// Don't rotate when the controller rotates. Let that just affect the camera.
	bUseControllerRotationPitch = false;
	bUseControllerRotationYaw = false;
	bUseControllerRotationRoll = false;

	// Configure character movement
	GetCharacterMovement()->bOrientRotationToMovement = true; // Character moves in the direction of input...	
	GetCharacterMovement()->RotationRate = FRotator(0.0f, 500.0f, 0.0f); // ...at this rotation rate

	// Note: For faster iteration times these variables, and many more, can be tweaked in the Character Blueprint
	// instead of recompiling to adjust them
	GetCharacterMovement()->JumpZVelocity = 700.f;
	GetCharacterMovement()->AirControl = 0.35f;
	GetCharacterMovement()->MaxWalkSpeed = 500.f;
	GetCharacterMovement()->MinAnalogWalkSpeed = 20.f;
	GetCharacterMovement()->BrakingDecelerationWalking = 2000.f;

	// Create a camera boom (pulls in towards the player if there is a collision)
	CameraBoom = CreateDefaultSubobject<USpringArmComponent>(TEXT("CameraBoom"));
	CameraBoom->SetupAttachment(RootComponent);
	CameraBoom->TargetArmLength = 400.0f; // The camera follows at this distance behind the character	
	CameraBoom->bUsePawnControlRotation = true; // Rotate the arm based on the controller

	// Create a follow camera
	FollowCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("FollowCamera"));
	FollowCamera->SetupAttachment(CameraBoom, USpringArmComponent::SocketName); // Attach the camera to the end of the boom and let the boom adjust to match the controller orientation
	FollowCamera->bUsePawnControlRotation = false; // Camera does not rotate relative to arm

	// Note: The skeletal mesh and anim blueprint references on the Mesh component (inherited from Character) 
	// are set in the derived blueprint asset named ThirdPersonCharacter (to avoid direct content references in C++)
}

////////
// Input

void ANOMCharacter::SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent)
{

	Super::SetupPlayerInputComponent(PlayerInputComponent);

	PlayerInputComponent->BindAction("LeftMouseButton", IE_Pressed, this, &ANOMCharacter::OnLeftMouseButtonPressed);
	PlayerInputComponent->BindAction("LeftMouseButton", IE_Released, this, &ANOMCharacter::OnLeftMouseButtonReleased);
	PlayerInputComponent->BindAction("RightMouseButton", IE_Pressed, this, &ANOMCharacter::OnRightMouseButtonPressed);
	PlayerInputComponent->BindAction("RightMouseButton", IE_Released, this, &ANOMCharacter::OnRightMouseButtonReleased);


	
	// Set up gameplay key bindings
	check(PlayerInputComponent);
	PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &ACharacter::Jump);
	PlayerInputComponent->BindAction("Jump", IE_Released, this, &ACharacter::StopJumping);

	PlayerInputComponent->BindAxis("M_U1", this, &ANOMCharacter::Move_Y);
	PlayerInputComponent->BindAxis("M_U2", this, &ANOMCharacter::Move_Y);
	PlayerInputComponent->BindAxis("M_D1", this, &ANOMCharacter::Move_Y);
	PlayerInputComponent->BindAxis("M_D2", this, &ANOMCharacter::Move_Y);

	PlayerInputComponent->BindAxis("M_L1", this, &ANOMCharacter::Move_X);
	PlayerInputComponent->BindAxis("M_L2", this, &ANOMCharacter::Move_X);
	PlayerInputComponent->BindAxis("M_R1", this, &ANOMCharacter::Move_X);
	PlayerInputComponent->BindAxis("M_R2", this, &ANOMCharacter::Move_X);


	// We have 2 versions of the rotation bindings to handle different kinds of devices differently
	// "turn" handles devices that provide an absolute delta, such as a mouse.
	// "turnrate" is for devices that we choose to treat as a rate of change, such as an analog joystick
	// 
	PlayerInputComponent->BindAxis("Turn Right / Left Mouse", this, &APawn::AddControllerYawInput);
	PlayerInputComponent->BindAxis("Turn Right / Left Gamepad", this, &ANOMCharacter::TurnAtRate);
	PlayerInputComponent->BindAxis("Look Up / Down Mouse", this, &APawn::AddControllerPitchInput);
	PlayerInputComponent->BindAxis("Look Up / Down Gamepad", this, &ANOMCharacter::LookUpAtRate);

	// handle touch devices
	PlayerInputComponent->BindTouch(IE_Pressed, this, &ANOMCharacter::TouchStarted);
	PlayerInputComponent->BindTouch(IE_Released, this, &ANOMCharacter::TouchStopped);
}


void ANOMCharacter::OnLeftMouseButtonPressed()
{
	LeftMouseButtonIsBeingPressed = true;
}

void ANOMCharacter::OnLeftMouseButtonReleased()
{
	LeftMouseButtonIsBeingPressed = false;
}

void ANOMCharacter::OnRightMouseButtonPressed()
{
	RightMouseButtonIsBeingPressed = true;
}

void ANOMCharacter::OnRightMouseButtonReleased()
{
	RightMouseButtonIsBeingPressed = false;
}

void ANOMCharacter::TouchStarted(ETouchIndex::Type FingerIndex, FVector Location)
{
	Jump();
}

void ANOMCharacter::TouchStopped(ETouchIndex::Type FingerIndex, FVector Location)
{
	StopJumping();
}

void ANOMCharacter::TurnAtRate(float Rate)
{
	// calculate delta for this frame from the rate information
	AddControllerYawInput(Rate * TurnRateGamepad * GetWorld()->GetDeltaSeconds());
}

void ANOMCharacter::LookUpAtRate(float Rate)
{
	// calculate delta for this frame from the rate information
	AddControllerPitchInput(Rate * TurnRateGamepad * GetWorld()->GetDeltaSeconds());
}

void ANOMCharacter::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

	if (LeftMouseButtonIsBeingPressed && RightMouseButtonIsBeingPressed)
	{
		AddMovementInput(GetActorForwardVector());
	}
}


void ANOMCharacter::Move_Y(float Value)
{
	if ((Controller != nullptr) && (Value != 0.0f))
	{
		// find out which way is forward
		const FRotator Rotation = Controller->GetControlRotation();
		const FRotator YawRotation(0, Rotation.Yaw, 0);

		// get forward vector
		const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X);
		AddMovementInput(Direction, Value);
	}
}

void ANOMCharacter::Move_X(float Value)
{
	if ((Controller != nullptr) && (Value != 0.0f))
	{
		// find out which way is right
		const FRotator Rotation = Controller->GetControlRotation();
		const FRotator YawRotation(0, Rotation.Yaw, 0);

		// get right vector 
		const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y);
		// add movement in that direction
		AddMovementInput(Direction, Value);
	}
}

H:

// Copyright Epic Games, Inc. All Rights Reserved.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "NOMCharacter.generated.h"

UCLASS(config = Game)
class ANOMCharacter : public ACharacter
{
	GENERATED_BODY()

	/** Camera boom positioning the camera behind the character */
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true"))
	class USpringArmComponent* CameraBoom;

	/** Follow camera */
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true"))
	class UCameraComponent* FollowCamera;

public:
	ANOMCharacter();

	/** Base turn rate, in deg/sec. Other scaling may affect final turn rate. */
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Input)
	float TurnRateGamepad;



protected:

	// Called when the game starts or when spawned
	virtual void BeginPlay() override;

	void OnLeftMouseButtonPressed();
	void OnLeftMouseButtonReleased();
	void OnRightMouseButtonPressed();
	void OnRightMouseButtonReleased();

	bool LeftMouseButtonIsBeingPressed;
	bool RightMouseButtonIsBeingPressed;
	
	/** Called for forwards/backward input */
	void Move_Y(float Value);

	/** Called for side to side input */
	void Move_X(float Value);

	void ANOMCharacter::OnLeftMouseButtonPressed()
	{
		LeftMouseButtonIsBeingPressed = true;
	}

	void ANOMCharacter::OnLeftMouseButtonReleased()
	{
		LeftMouseButtonIsBeingPressed = false;
	}

	void ANOMCharacter::OnRightMouseButtonPressed()
	{
		RightMouseButtonIsBeingPressed = true;
	}

	void ANOMCharacter::OnRightMouseButtonReleased()
	{
		RightMouseButtonIsBeingPressed = false;
	}
	
	/**
	 * Called via input to turn at a given rate.
	 * @param Rate	This is a normalized rate, i.e. 1.0 means 100% of desired turn rate
	 */
	void TurnAtRate(float Rate);

	/**
	 * Called via input to turn look up/down at a given rate.
	 * @param Rate	This is a normalized rate, i.e. 1.0 means 100% of desired turn rate
	 */
	void LookUpAtRate(float Rate);

	/** Handler for when a touch input begins. */
	void TouchStarted(ETouchIndex::Type FingerIndex, FVector Location);

	/** Handler for when a touch input stops. */
	void TouchStopped(ETouchIndex::Type FingerIndex, FVector Location);

public:

	virtual void Tick(float DeltaTime) override;

	//virtual void Tick(float DeltaTime) override;

	virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;

	/** Returns CameraBoom subobject **/
	FORCEINLINE class USpringArmComponent* GetCameraBoom() const { return CameraBoom; }
	/** Returns FollowCamera subobject **/
	FORCEINLINE class UCameraComponent* GetFollowCamera() const { return FollowCamera; }
};

Those errors you are showing here, don’t have anything to do with these bindings (as I am aware). They seem to be related to a class that overrides functions not defined in its parent class. Try double-clicking the error, it’ll jump to the file with those issues.

The last one (identifier “something” is undefined) is a common error when you are using a class that is not included in the class that you are using it.

Your Visual Studio screenshot is only showing IntelliSense errors, which you can ignore. In the Error List, change the “Build + IntelliSense” dropdown to “Build Only” and then send the screenshot that shows all of the error list.