The error which comes every time is
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\msys64\tmp\ccmtnC4W.o:C:\Users\param\Documents\code\7.2/program.cpp:42: undefined reference to `draw_hud(player_data const&, planet_data const&)'
collect2.exe: error: ld returned 1 exit status
Is there any method of solving it?
#include "splashkit.h"
#include "player.h"
#include "planet.h"
/**
 * Load the game images, sounds, etc.
 */
void load_resources()
{
    load_resource_bundle("game_bundle", "lost_in_space.txt");
}
/**
 * Entry point.
 * 
 * Manages the initialisation of data, the event loop, and quitting.
 */
int main()
{
    open_window("Lost In Space", 800, 800);
    load_resources();
    player_data player;
    player = new_player();
    planet_data planet;
    planet = new_planet(200, 300);
    while ( not quit_requested() )
    {
        // Handle input to adjust player movement
        process_events();
        handle_input(player);
        // Perform movement and update the camera
        update_player(player);
        update_planet(planet);
        // Redraw everything
        clear_screen(COLOR_BLACK);
        draw_hud(player, planet); //THIS IS THE ERROR LINE
        // as well as the player who can move
        draw_planet(planet);
        draw_player(player);
        refresh_screen(60);
    }
    return 0;
}
//There is another file as player.h in which this is defined. There are other files also but the problem is due to these two only
#ifndef LOST_IN_SPACE_PLAYER
#define LOST_IN_SPACE_PLAYER
#include "splashkit.h"
#include "planet.h"
#include <vector>
using namespace std;
#define PLAYER_SPEED 1.5
#define PLAYER_ROTATE_SPEED 3
#define SCREEN_BORDER 100
/**
 * Different options for the kind of ship.
 * Adjusts the image used.
 */
enum ship_kind
{
    AQUARII,
    GLIESE,
    PEGASI
};
/**
 * The player data keeps track of all of the information related to the player.
 * 
 * @field   player_sprite   The player's sprite - used to track position and movement
 * @field   score           The current score for the player
 * @field   kind            Current kind of player ship
 */
struct player_data
{
    sprite      player_sprite; //Character element
    int         score = 0;
    ship_kind   kind;
};
/**
 * Creates a new player in the centre of the screen with the default ship.
 * 
 * @returns     The new player data
 */
player_data new_player();
/**
 * Draws the player to the screen. 
 * 
 * @param player_to_draw    The player to draw to the screen
 */
void draw_player(const player_data &player_to_draw);
/**
 * Actions a step update of the player - moving them and adjusting the camera.
 * 
 * @param player_to_update      The player being updated
 */
void update_player(player_data &player_to_update);
/**
 * Read user input and update the player based on this interaction.
 * 
 * @param player    The player to update
 */
void handle_input(player_data &player);
//draw the location, score and the process bar
void draw_hud(const player_data &player, const planet_data &planet); //THIS IS THE ERROR LINE
#endif 
//player.cpp file added This is the player.cpp file in which the draw_hud is defined. you can check that and suggest me what is wrong and how to solve the problem
#include "player.h"
#include "splashkit.h"
#include <string>
using namespace std;
/**
 * The ship bitmap function converts a ship kind into a 
 * bitmap that can be used.
 * 
 * Not exposed by the header.
 * 
 * @param kind  The kind of ship you want the bitmap of
 * @return      The bitmap matching this ship kind
 */
bitmap ship_bitmap(ship_kind kind)
{
    switch (kind)
    {
    case AQUARII:
        return bitmap_named("aquarii");
    case GLIESE:
        return bitmap_named("gliese");
    default:
        return bitmap_named("pegasi");
    }
}
player_data new_player()
{
    player_data result;
    bitmap default_bitmap = ship_bitmap(AQUARII);
    // Create the sprite with 3 layers - we can turn on and off based
    // on the ship kind selected
    result.player_sprite = create_sprite(default_bitmap);
    sprite_add_layer(result.player_sprite, ship_bitmap(GLIESE), "GLIESE");
    sprite_add_layer(result.player_sprite, ship_bitmap(PEGASI), "PEGASI");
    // Default to layer 0 = Aquarii so hide others
    sprite_hide_layer(result.player_sprite, 1);
    sprite_hide_layer(result.player_sprite, 2);
    result.kind = AQUARII;
    // Position in the centre of the initial screen
    sprite_set_x(result.player_sprite, ( screen_width() - sprite_width(result.player_sprite) )/ 2);
    sprite_set_y(result.player_sprite, ( screen_height() - sprite_height(result.player_sprite) )/ 2);
    return result;
}
void draw_player(const player_data &player_to_draw)
{
    draw_sprite(player_to_draw.player_sprite);
}
void update_player(player_data &player_to_update)
{
    // Apply movement based on rotation and velocity in the sprite
    update_sprite(player_to_update.player_sprite);
    // Test edge of screen boundaries to adjust the camera
    double left_edge = camera_x() + SCREEN_BORDER;
    double right_edge = left_edge + screen_width() - 2 * SCREEN_BORDER;
    double top_edge = camera_y() + SCREEN_BORDER;
    double bottom_edge = top_edge + screen_height() - 2 * SCREEN_BORDER;
    // Get the center of the player
    point_2d sprite_center = center_point(player_to_update.player_sprite);
    // Test if the player is outside the area and move the camera
    // the player will appear to stay still and everything else
    // will appear to move :)
    // Test top/bottom of screen
    if (sprite_center.y < top_edge)
    {
        move_camera_by(0, sprite_center.y - top_edge);
    }
    else if (sprite_center.y > bottom_edge)
    {
        move_camera_by(0, sprite_center.y - bottom_edge);
    }
    // Test left/right of screen
    if (sprite_center.x < left_edge)
    {
        move_camera_by(sprite_center.x - left_edge, 0);
    }
    else if (sprite_center.x > right_edge)
    {
        move_camera_by(sprite_center.x - right_edge, 0);
    }
}
/**
 * Switch the ship kind - will adjust which layer is hidden/shown
 */
void player_switch_to_ship(player_data &player, ship_kind target)
{
    // only do this if there is a change
    if (player.kind != target)
    {
        // show then hide layers
        sprite_show_layer(player.player_sprite, static_cast<int>(target));
        sprite_hide_layer(player.player_sprite, static_cast<int>(player.kind));
        // remember what is currently shown
        player.kind = target;
    }
}
void handle_input(player_data &player)
{
    // Allow the player to switch ships
    if (key_typed(NUM_1_KEY))
        player_switch_to_ship(player, AQUARII);
    if (key_typed(NUM_2_KEY))
        player_switch_to_ship(player, GLIESE);
    if (key_typed(NUM_3_KEY))
        player_switch_to_ship(player, PEGASI);
    // Handle movement - rotating left/right and moving forward/back
    float dx = sprite_dx(player.player_sprite);
    float rotation = sprite_rotation(player.player_sprite);
    // Allow rotation with left/right keys
    if (key_down(LEFT_KEY))
        sprite_set_rotation(player.player_sprite, rotation - PLAYER_ROTATE_SPEED);
    if (key_down(RIGHT_KEY))
        sprite_set_rotation(player.player_sprite, rotation + PLAYER_ROTATE_SPEED);
    // Increase speed with up/down keys - typed to give step increases
    if (key_typed(DOWN_KEY))
        sprite_set_dx(player.player_sprite, dx - PLAYER_SPEED);
    if (key_typed(UP_KEY))
        sprite_set_dx(player.player_sprite, dx + PLAYER_SPEED);
}
void draw_hud(player_data &player, planet_data &planet)
{
    //integer variables that store player's location
    int x, y, distance;
    //struct that stores player's location and planet's location
    point_2d player_location, planet_location;
    
    //assign the center point of each sprite to its struct
    player_location = center_point(player.player_sprite);
    planet_location = center_point(planet.planet_sprite);
    //asign the x, y location to the integer variables
    x = player_location.x;
    y = player_location.y;
    //expresion to calculate distance between the player's sprite and planet's sprite
    distance = point_point_distance(player_location, planet_location);
    //draw the head up display with shape background, location, score, distance and progress bar
    fill_rectangle(COLOR_DARK_GRAY,0 ,0 , 320, 92, option_to_screen());
    draw_rectangle(COLOR_WHITE,0 ,0 , 320, 92, option_to_screen());
    draw_text("LOCATION: " + to_string(x) + "," + to_string(y), COLOR_WHITE, 10, 10, option_to_screen());
    draw_text("SCORE: ", COLOR_WHITE, 10, 20, option_to_screen());
    draw_text("DISTANCE: " + to_string(distance), COLOR_WHITE, 10, 30, option_to_screen());
    draw_bitmap(bitmap_named("empty_bar_transparent"), 10, 40, option_to_screen());
    draw_bitmap(bitmap_named("purple_bar"), 10, 40, option_part_bmp(0, 0, 150, 42, option_to_screen()));
}
