Cryptic Class Compiling Error

I have three files: one is a header file, one includes definitions for functions in the header file, and the last one is the main file with the body of the code. The header file and the file with definitions have the name “ClassDefine,” so “ClassDefine.hpp” and “ClassDefine.cpp.” The main file has the name “ConsoleApplication1.cpp.” I am getting these two error messages:

\\|Error|LNK2005|int __cdecl index(class std::vector<class Status,class std::allocator<class Status> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >) (?index@@YAHV?$vector@VStatus@@V?$allocator@VStatus@@@std@@@std@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z) already defined in ClassDefine.obj|ConsoleApplication1|ConsoleApplication1.obj|1||

and

\\|Error|LNK1169|one or more multiply defined symbols found|ConsoleApplication1|ConsoleApplication1.exe|1||

Here is the code:

\\ClassDefine.hpp
#include <iostream>
#include <cstdlib>
#include <vector>
#ifndef CLASSDEFINE_HPP
#define CLASSDEFINE_HPP

class Status {
    int _severity;
    std::vector<float> _hourEffect;
    std::vector<float> _activeEffect;
    std::string _name;
public:
    Status(std::string name);
    std::string name();
};

class Character {
public:
    Character(std::string name, std::vector<int> primary_choice, std::vector<int> secondary_choice);
    std::string name();
    Character(std::string name);
    void name(std::string name);
    void displayStats();
    void turnPass(int hours = 24);
    void addStatus(Status status);


private:
    float _damage;
    float _maxHealth;
    float _health;
    std::string _name;
    float _strength;
    float _agility;
    float _wisdom;
    float _charisma;
    float _money;
    float _rations = 0;
    float _distance = 0;
    bool _starving = false;
    bool _shelter = false;
    std::vector<Status> _statusList = {};
    std::vector<float> _buffs;

};

template<typename T>
std::vector<T> sort(std::vector<T> list) {
    std::vector<T> placeHolder = list;
    T num;
    for (int i = 0; i < placeHolder.size(); i++) {
        for (int j = i; j < placeHolder.size(); j++) {
            if (placeHolder[i] < placeHolder[j]) {
                num = placeHolder[j];
                placeHolder[j] = placeHolder[i];
                placeHolder[i] = num;
            }
        }
    }
    return placeHolder;
};

template<typename T>
std::string status(T var) {
    if (var < 25) {
        return "low";
    }
    else if (var < 75) {
        return "mid";
    }
    else {
        return "high";
    }
};

template<typename T>
int index(std::vector<T> list, T num) {
    for (int i = 0; i < list.size(); i++) {
        if (list[i] == num) {
            return i;
        }
    }

    return -1;
};

int index(std::vector<Status> list, std::string name) {
    for (int i = 0; i < list.size(); i++) {
        if (list[i].name() == name) {
            return i;
        }
    }

    return -1;
};

template<typename T>
float average(std::vector<T>list) {
    float sum = 0;
    for (int i = 0; i < list.size(); i++) {
        sum += list[i];
    }
    return sum / list.size();
}

Character createRandomCharacter(std::string name);

int intDec(std::string prompt, std::vector<std::string> decs);

#endif
\\ClassDefine.cpp
#include "ClassDefine.hpp";
#include <iostream>
#include <cstdlib>
#include <vector>

Character::Character(std::string name, std::vector<int> primary_choice, std::vector<int> secondary_choice)
{
    _name = name;
    std::vector<float> primary_stats(3);
    std::vector<float> secondary_stats(3);

    while (average(primary_stats) < 50) {
        primary_stats = { float(std::rand() % 100), float(std::rand() % 100), float(std::rand() % 100) };
    };

    while (average(secondary_stats) < 50) {
        secondary_stats = { float(std::rand() % 100), float(std::rand() % 100), float(std::rand() % 100) };
    }

    primary_stats = sort(primary_stats);
    secondary_stats = sort(secondary_stats);

    _strength = primary_stats[index(primary_choice, 1)];
    _agility = primary_stats[index(primary_choice, 2)];
    _maxHealth = primary_stats[index(primary_choice, 3)];
    _health = _maxHealth;
    _damage = _strength * float(0.1);

    _wisdom = secondary_stats[index(secondary_choice, 1)];
    _charisma = secondary_stats[index(secondary_choice, 2)];
    _money = secondary_stats[index(secondary_choice, 3)];


};

Character::Character(std::string name) {
    _name = name;
    std::vector<float> primary_stats(3);
    std::vector<float> secondary_stats(3);

    while (average(primary_stats) < 50) {
        primary_stats = { float(std::rand() % 100), float(std::rand() % 100), float(std::rand() % 100) };
    };

    while (average(secondary_stats) < 50) {
        secondary_stats = { float(std::rand() % 100), float(std::rand() % 100), float(std::rand() % 100) };
    }

    primary_stats = sort(primary_stats);
    secondary_stats = sort(secondary_stats);

    std::vector<int> primChoice = {};
    std::vector<int> secoChoice = {};


}

std::string Character::name() {
    return _name;
};

void Character::name(std::string name) {
    _name = name;
};

void Character::displayStats() {
    std::cout << "Name: " << _name << "\n";
    std::cout << "Health: " << _health << "/" << _maxHealth << "\n";
    std::cout << "Damage: " << _damage << "\n";
    std::cout << "Money: $" << _money << "\n";
    std::cout << "Rations: " << _rations << "\n";
    if (_starving) {
        std::cout << _name << " is starving\n";
    };
    std::cout << "Distance: " << _distance << " miles\n";
};

void Character::turnPass(int hours) {
    _rations -= hours / 24;
}

Status::Status(std::string name) {
    _name = name;
};

void Character::addStatus(Status status) {
    _statusList.emplace_back(status);
};

std::string Status::name() {
    return _name;
};


Character createRandomCharacter(std::string name) {
    Character character(name, { 1, 2, 3 }, { 1, 2, 3 });
    return character;
};

int intDec(std::string prompt, std::vector<std::string> decs) {
    int dec = -1;
    while (dec <= 0 or dec > decs.size()) {
        std::cout << prompt << "\n";
        for (int i = 1; i <= decs.size(); i++) {
            std::cout << i << ". " << decs[i - 1] << "\n";
        };
        std::cin >> dec;
        if (dec <= 0 or dec > decs.size()) {
            std::cout << "Invalid input\n";
        };
    };
    return dec;
}
\\ConsoleApplication1.cpp
#include <iostream>
#include <cstdlib>
#include <vector>
#include "ClassDefine.hpp"







int main()
{

    srand(time(NULL));

    std::string name;
    int primary_focus;
    int secondary_focus;
    std::vector<int> primChoice(3);
    std::vector<int> secoChoice(3);

    std::cout << "What is your character's first name?: ";
    std::cin >> name;
    primary_focus = intDec("What will be their primary focus?", { "strength", "agility", "constitution" });
    secondary_focus = intDec("What will be their secondary focus?", { "wisdom", "charisma", "wealth" });
    if (primary_focus == 1) {
        primChoice = { 1, 2, 3 };
    }
    else if (primary_focus == 2) {
        primChoice = { 2, 3, 1 };
    }
    else {
        primChoice = { 3, 1, 2 };
    }
    if (secondary_focus == 1) {
        secoChoice = { 1, 2, 3 };
    }
    else if (secondary_focus == 2) {
        secoChoice = { 2, 3, 1 };
    }
    else {
        secoChoice = { 3, 1, 2 };
    }
    Character player(name, primChoice, secoChoice);
    player.displayStats();

    int stage = 0;

}