Я пытаюсь создать игру, в которой у меня есть разные типы агентов. Я определяю с помощью некоторых виртуальных методов в родительском классе с именем «Agent», и я хочу, чтобы дочерние классы «Tanc» и «Asasin» «чтобы иметь возможность использовать те же методы. Но это не работает, и программа завершает работу с ошибкой неразрешенного внешнего символа.
Например, если я определяю агента, Танк X.
Если я пытаюсь вызвать x.Get_Attack (), он не работает.
Я пытался найти в Интернете некоторые объяснения по этому вопросу, но, похоже, ничего не работает.
Вот мой Agenti.h
#pragma once
#include <iostream>
#include <string>
class GameMode;
class Agent
{
private:
int id;
std::string nume;
int viata;
int atac;
int aparare;
int scut;
int viteza;
enum Iteme
{
};
std::pair<int, int > pozitie;
public:
Agent();
virtual int Get_Health() { return viata; }
virtual int Get_Attack() { return atac; }
virtual int Get_Defence() { return aparare; }
virtual int Get_Shield() { return scut; }
virtual int Get_Speed() { return viteza; }
virtual std::string Get_Name(){ return nume; }
virtual int Get_ID() { return id; }
virtual std::pair<int,int> Get_Position() { return pozitie; }
virtual void Set_Position(GameMode& obj);
};
class Tanc : public Agent
{
private:
int id = 1;
std::string nume;
int viata = 150;
int atac = 10;
int aparare;
int scut;
int viteza;
std::pair<int, int > pozitie;
enum Iteme
{
};
public:
Tanc();
int Get_Health() override;
int Get_Attack() override;
int Get_Defence() override;
int Get_Shield() override;
int Get_Speed() override;
std::string Get_Name() override;
int Get_ID() override;
std::pair<int, int> Get_Position() override;
void Set_Position(GameMode& obj) override;
};
class Asasin : public Agent
{
private:
int id;
std::string nume;
int viata;
int atac;
int aparare;
int scut;
int viteza;
std::pair<int, int > pozitie;
enum Iteme
{
};
public:
Asasin();
int Get_Health() override;
int Get_Attack() override;
int Get_Defence() override;
int Get_Shield() override;
int Get_Speed() override;
std::string Get_Name() override;
int Get_ID() override;
std::pair<int, int> Get_Position() override;
void Set_Position(GameMode& obj) override;
};
А вот и мой Agenti.cpp
#include "pch.h"
#include "Agenti.h"
#include "GameMode.h"
#include <fstream>
#include <ctime>
std::ifstream f("Nume_Agenti.txt");
Agent::Agent()
{
this->aparare = 0;
this->atac = 0;
this->viata = 0;
this->id = 0;
this->nume = "";
this->scut = 0;
this->viteza = 0;
}
void Agent::Set_Position(GameMode& obj)
{
srand((int)time(0));
int **harta = obj.Get_The_Map();
do
{
this->pozitie.first = rand() % obj.Aflam_lungimea();
this->pozitie.second = rand() % obj.Aflam_latimea();
} while (harta[pozitie.first][pozitie.second] != 0);
}
Asasin::Asasin()
{
this->id = 2;
f >> this->nume;
this->viata = 75;
this->atac = 45;
this->aparare = 10;
this->scut = 0;
this->viteza = 3;
}
Tanc::Tanc()
{
this->id = 1;
f >> this->nume;
this->viata = 150;
this->atac = 10;
this->aparare = 15;
this->scut = 50;
this->viteza = 1;
}
Я ожидал, что это сработает, но, как я уже сказал, он завершился с ошибкой компиляции, неразрешенным внешним символом (LNK 2001)