[ShooterGame] Where in AShooterCharacter is AShooterWeapon defined?

This files come from the ShooterGame project that you can install for UE4.

In ShooterCharacter.cpp at line 690, there is a member function that uses an object CurrentWeapon which is a pointer of the class AShooterWeapon, it uses a member function AShooterWeapon::StartFire(), but in AShooterCharacter there is no definition of the AShooterWeapon class, so where does it get the memberfunction AShooterWeapon::StartFire() from?

void AShooterCharacter::StartWeaponFire()
{
	if (!bWantsToFire)
	{
		bWantsToFire = true;
		if (CurrentWeapon)
		{
			CurrentWeapon->StartFire();
		}
	}
}

Starting from line 277 of ShooterCharacter.h, you can see a declaration of CurrentWeapon pointer:

	/** currently equipped weapon */
	UPROPERTY(Transient, ReplicatedUsing = OnRep_CurrentWeapon)
	class AShooterWeapon* CurrentWeapon;

Where is the StartFire() member function defined??

ShooterGame\Source\ShooterGame\Private\Weapons\ShooterWeapon.cpp:218

It’s declared in the ShooterWeapon.h file, and defined in ShooterWeapon.cpp. AShooterCharacter knows this because the header to the weapon class is included on line 4.

#include "Weapons/ShooterWeapon.h"