Как заставить дочерние классы использовать функции родительского класса? - PullRequest
0 голосов
/ 05 апреля 2019

Я пытаюсь создать игру, в которой у меня есть разные типы агентов. Я определяю с помощью некоторых виртуальных методов в родительском классе с именем «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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...