Metoda do porównywania

0

Otóż mam mały problem z metodą w mojej klasie bo nie odczytuje ona wartosci z klasy "przyjaznej" i przez to porównanie wartości obydwu obiektów traci sens

main.cpp
#include <iostream>
#include <stdio.h>
#include "respawn.h"

using namespace std;

main()
{
    Potwor mon;
    mon.load();
    mon.show();
    mon.respawn();

    Postac ch;
    ch.load(); //metoda oddziedziczona po klasie Character
    ch.show(); //metoda oddziedziczona po klasie Character

    ch.porownaj();
    return 0;
}


 
 respawn.h

#include <iostream>
#include <stdio.h>
using namespace std;
class Character //klasa z ktorej dziedzicza klasy Postac i Potwor !
    {
protected:
    string nazwa, np, nP;
    int x, y;
    int sila;
    int wytrzymalosc;
    float zdrowie;
    int inteligencja, zrecznosc;
    char odp;
    int wynik, wynik1;

public:
    void load();
    void show();
    void respawn();
};

class Postac : public Character {
public:
    Postac(string = "Mr.Nobody", int = 5, int = 5, float = 100, int = 5, int = 5); //konstruktor i wartosci domyslne tego konstruktora
    ~Postac(); //destruktor
    friend class Potwor;
    void porownaj();
};

class Potwor : public Character {
public:
    Potwor(string = "Potwor", int = 5, int = 5, float = 100, int = 5, int = 5); //konstruktor i wartosci domyslne tego konstruktora
    ~Potwor(); //destruktor
    friend class Postac;
    friend void porownaj();
    void load();
    void show();
    void respawn();
};
 respawn.cpp
#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include "respawn.h"
using namespace std;
int wynik, wynik1;
void Character::load() // metoda wczytujaca dane postaci
{
    cout << "Czy chcesz wprowadzić Atrybuty Postaci(t/n)?";
    cin >> odp;
    if (odp == 't' || odp == 'T') {
        cout << "\nPodaj \033[3;96mNazwe Postaci\033[0m:";
        cin >> nazwa;
        cout << "Podaj \033[93mSile\033[0m " << nazwa << "'a:";
        cin >> sila;
        cout << "Podaj \033[95mWytrzymalosc\033[0m " << nazwa << "'a:";
        cin >> wytrzymalosc;
        cout << "Podaj Ilosc \033[91mZdrowia\033[0m " << nazwa << "'a:";
        cin >> zdrowie;
        cout << "Podaj \033[32mZrecznosc\033[0m " << nazwa << "'a:";
        cin >> zrecznosc;
        cout << "Podaj \033[94mInteligencje\033[0m " << nazwa << "'a:";
        cin >> inteligencja;
        cout << "\n";
    }
}
void Character::show() // metoda ukazująca dane postaci
{
    system("clear");
    cout << "\033[3;96mNazwa Postaci\033[0m:" << nazwa << endl
         << "\033[93mSila\033[0m:" << sila << endl
         << "\033[95mWytrzymalosc\033[0m:" << wytrzymalosc << endl
         << "\033[91mZdrowie\033[0m:" << zdrowie << endl
         << "\033[32mZrecznosc\033[0m:" << zrecznosc << endl
         << "\033[94mInteligencja\033[0m:" << inteligencja << endl;
    nP = nazwa;
    wynik1 = sila + wytrzymalosc + zrecznosc + inteligencja / zdrowie;
}

Postac::Postac(string n, int s, int w, float zdr, int zr,
    int intel) // konstruktor klasy Postac
{
    nazwa = n;
    sila = s;
    wytrzymalosc = w;
    zdrowie = zdr;
    zrecznosc = zr;
    inteligencja = intel;
}
Postac::~Postac() // destruktor klasy Postac
{
    cout << "\nJezeli widzisz ten komunikat to znaczy,ze twoj komputer zniknie "
            "za…1…2…3 BOOM!"
         << endl;
}

void Potwor::load() // metoda wczytująca dane potworka
{
    cout << "Czy chcesz wprowadzić Atrybuty Potwora(t/n)?";
    cin >> odp;
    if (odp == 't' || odp == 'T') {
        cout << "\nPodaj \033[3;96mNazwe Potwora\033[0m:";
        cin >> nazwa;
        cout << "Podaj \033[93mSile\033[0m " << nazwa << "'a:";
        cin >> sila;
        cout << "Podaj \033[95mWytrzymalosc\033[0m " << nazwa << "'a:";
        cin >> wytrzymalosc;
        cout << "Podaj Ilosc \033[91mZdrowia\033[0m " << nazwa << "'a:";
        cin >> zdrowie;
        cout << "Podaj \033[32mZrecznosc\033[0m " << nazwa << "'a:";
        cin >> zrecznosc;
        cout << "Podaj \033[94mInteligencje\033[0m " << nazwa << "'a:";
        cin >> inteligencja;
        cout << "\n";
    }
}
void Potwor::show() // metoda ukazująca dane potworka
{
    system("clear");
    cout << "\033[3;96mNazwa Potwora\033[0m:" << nazwa << endl
         << "\033[93mSila\033[0m:" << sila << endl
         << "\033[95mWytrzymalosc\033[0m:" << wytrzymalosc << endl
         << "\033[91mZdrowie\033[0m:" << zdrowie << endl
         << "\033[32mZrecznosc\033[0m:" << zrecznosc << endl
         << "\033[94mInteligencja\033[0m:" << inteligencja << endl;
    np = nazwa;
    wynik = sila + wytrzymalosc + zrecznosc + inteligencja / zdrowie;
}

void Potwor::respawn() // metoda do respawnu potworkow ver.Pre-Alpha
{

    cout << "\nIle chcesz tych Potworów?" << endl;
    cin >> x;
    cout << "++++++++++++++++++++++++++++++++++++++++++\n";
    for (y = 1; y <= x; y++) {
        cout << "+  " << y << " " << nazwa << "                              +"
             << endl;
    } // koniec fora
    cout << "++++++++++++++++++++++++++++++++++++++++++\n";
} // koniec voida

Potwor::Potwor(string n, int s, int w, float zdr, int zr,
    int intel) // konstruktor
{
    nazwa = n;
    sila = s;
    wytrzymalosc = w;
    zdrowie = zdr;
    zrecznosc = zr;
    inteligencja = intel;
}
Potwor::~Potwor() // destruktor
{
    cout << "\nMozna dzialac na nowo :D" << endl;
}

void Postac::porownaj()
{
    if (wynik < wynik1) {
        cout << np << " Przegralby z " << nP;
    }
    else if (wynik > wynik1)
        cout << np << " Wygralby z " << nP;
    else if (wynik == wynik1) {
        cout << "Bylby remis";
    }
}
2
int main()

Bez using namespace std w pliku nagłówkowym.
Bez #include <stdio.h> - po co mieszać C do tego?
Nazwij zmienne sensownie - co to jest np, nP, wynik, wynik1?

Nie używaj zmiennych globalnych

int wynik, wynik1;

W tym przypadku nic nie robią bo modyfikujesz zmienne wewnątrz klasy, ale generalnie mogą mocno mieszać.

Przecież metoda porownaj() bierze zarówno wynik jak i wynik1 z tego samego obiektu, więc niby gdzie jest odczytanie wartości z klasy przyjaznej?

0

Kod z nagłówka

respawn.h
#include <iostream>

    class Character //klasa z ktorej dziedzicza klasy Postac i Potwor !
    {
protected:
    std::string nazwa, np, nP; //nazwa <- nazwa ogólna potwora,bądź postaci która po tej klasie dziedziczy, np<-nazwa potworka gdyż nie wiem jak wczytać ją z metody load() do metody porownaj() nP<-nazwa postaci też z tych samych pobudek;
    int x, y;
    int sila;
    int wytrzymalosc;
    float zdrowie;
    int inteligencja, zrecznosc;
    char odp;
    int wynik1, wynik; //wartości do porównywania kto by wygrał gdyby doszło do ewentualnego pojedynku

public:
    virtual void load() = 0;
    virtual void show() = 0;
};

class Postac : public Character {

public:
    Postac(std::string = "Mr.Nobody", int = 5, int = 5, float = 100, int = 5, int = 5); //konstruktor i wartosci domyslne tego konstruktora
    ~Postac(); //destruktor
    friend class Potwor;
    void load();
    void show();
    void porownaj();
};

class Potwor : public Character {
public:
    Potwor(std::string = "Potwor", int = 5, int = 5, float = 100, int = 5, int = 5); //konstruktor i wartosci domyslne tego konstruktora
    ~Potwor(); //destruktor
    friend class Postac;
    friend void porownaj();
    void load();
    void show();
    void respawn();
};
 
0

Postac dziedzicząca po Character? Nie dość, że mieszanie polskiego i angielskiego to lingwistycznie nie ma sensu.

int Monster::getScore()
{
    return score;
}

void Hero::compare(const Monster& monster)
{
    if (score < monster.getScore())
        ...
}
0
respawn.h
#include <iostream>

class Character //klasa z ktorej dziedzicza klasy Postac i Potwor !
    {
protected:
    std::string nazwa, np, nP; //nazwa <-ogólna potwora,bądź postaci która po tej klasie dziedziczy, np<-nazwa potworka gdyż nie wiem jak wczytać ją z metody load() do metody porownaj() nP<-nazwa postaci też z tych samych pobudek;
    int x, y;
    int sila;
    int wytrzymalosc;
    float zdrowie;
    int inteligencja, zrecznosc;
    char odp;
    int wynik1, wynik; //wartości do porównywania kto by wygrał gdyby doszło do ewentualnego pojedynku

public:
    virtual void load() = 0;
    virtual void show() = 0;
};

class Postac : public Character {

public:
    Postac(std::string = "Mr.Nobody", int = 5, int = 5, float = 100, int = 5, int = 5); //konstruktor i wartosci domyslne tego konstruktora
    ~Postac(); //destruktor
    friend class Potwor;
    void load(); // *tu pokazuje log błąd
    void show();
    void porownaj(const Potwor& monster);
};

class Potwor : public Character {
public:
    Potwor(std::string = "Potwor", int = 5, int = 5, float = 100, int = 5, int = 5); //konstruktor i wartosci domyslne tego konstruktora
    ~Potwor(); //destruktor
    friend class Postac;
    friend void porownaj();
    void load();
    void show();
    void respawn();
    int getScore();
};
 
respawn.cpp
#include <iostream>
#include <cstdlib>
#include "respawn.h"
using namespace std;

void Postac::load() //metoda wczytujaca dane postaci
{
    cout << "Czy chcesz wprowadzić Atrybuty Postaci(t/n)?";
    cin >> odp;
    if (odp == 't' || odp == 'T') {
        cout << "\nPodaj \033[3;96mNazwe Postaci\033[0m:";
        cin >> nazwa;
        cout << "Podaj \033[93mSile\033[0m " << nazwa << "'a:";
        cin >> sila;
        cout << "Podaj \033[95mWytrzymalosc\033[0m " << nazwa << "'a:";
        cin >> wytrzymalosc;
        cout << "Podaj Ilosc \033[91mZdrowia\033[0m " << nazwa << "'a:";
        cin >> zdrowie;
        cout << "Podaj \033[32mZrecznosc\033[0m " << nazwa << "'a:";
        cin >> zrecznosc;
        cout << "Podaj \033[94mInteligencje\033[0m " << nazwa << "'a:";
        cin >> inteligencja;
        cout << "\n";
    }
}
void Postac::show() //metoda ukazująca dane postaci
{
    system("clear");
    cout << "\033[3;96mNazwa Postaci\033[0m:" << nazwa << endl
         << "\033[93mSila\033[0m:" << sila << endl
         << "\033[95mWytrzymalosc\033[0m:" << wytrzymalosc << endl
         << "\033[91mZdrowie\033[0m:" << zdrowie << endl
         << "\033[32mZrecznosc\033[0m:" << zrecznosc << endl
         << "\033[94mInteligencja\033[0m:" << inteligencja << endl;
    nP = nazwa;
    wynik1 = sila + wytrzymalosc + zrecznosc + inteligencja / zdrowie;
}

Postac::Postac(string n, int s, int w, float zdr, int zr, int intel) //konstruktor klasy Postac
{
    nazwa = n;
    sila = s;
    wytrzymalosc = w;
    zdrowie = zdr;
    zrecznosc = zr;
    inteligencja = intel;
}
Postac::~Postac() //destruktor klasy Postac
{
    cout << "\nJezeli widzisz ten komunikat to znaczy,ze twoj komputer zniknie za…1…2…3 BOOM!" << endl;
}

void Potwor::load() //metoda wczytująca dane potworka
{
    cout << "Czy chcesz wprowadzić Atrybuty Potwora(t/n)?";
    cin >> odp;
    if (odp == 't' || odp == 'T') {
        cout << "\nPodaj \033[3;96mNazwe Potwora\033[0m:";
        cin >> nazwa;
        cout << "Podaj \033[93mSile\033[0m " << nazwa << "'a:";
        cin >> sila;
        cout << "Podaj \033[95mWytrzymalosc\033[0m " << nazwa << "'a:";
        cin >> wytrzymalosc;
        cout << "Podaj Ilosc \033[91mZdrowia\033[0m " << nazwa << "'a:";
        cin >> zdrowie;
        cout << "Podaj \033[32mZrecznosc\033[0m " << nazwa << "'a:";
        cin >> zrecznosc;
        cout << "Podaj \033[94mInteligencje\033[0m " << nazwa << "'a:";
        cin >> inteligencja;
        cout << "\n";
    }
}
void Potwor::show() //metoda ukazująca dane potworka
{
    system("clear");
    cout << "\033[3;96mNazwa Potwora\033[0m:" << nazwa << endl
         << "\033[93mSila\033[0m:" << sila << endl
         << "\033[95mWytrzymalosc\033[0m:" << wytrzymalosc << endl
         << "\033[91mZdrowie\033[0m:" << zdrowie << endl
         << "\033[32mZrecznosc\033[0m:" << zrecznosc << endl
         << "\033[94mInteligencja\033[0m:" << inteligencja << endl;
    np = nazwa;
    wynik = sila + wytrzymalosc + zrecznosc + inteligencja / zdrowie;
}

void Potwor::respawn() //metoda do respawnu potworkow ver.Pre-Alpha
{

    cout << "\nIle chcesz tych Potworów?" << endl;
    cin >> x;
    cout << "++++++++++++++++++++++++++++++++++++++++++\n";
    for (y = 1; y <= x; y++) {
        cout << "+  " << y << " " << nazwa << "                              +" << endl;
    } //koniec fora
    cout << "++++++++++++++++++++++++++++++++++++++++++\n";
} //koniec voida

Potwor::Potwor(string n, int s, int w, float zdr, int zr, int intel) //konstruktor
{
    nazwa = n;
    sila = s;
    wytrzymalosc = w;
    zdrowie = zdr;
    zrecznosc = zr;
    inteligencja = intel;
}
Potwor::~Potwor() //destruktor
{
    cout << "\nMozna dzialac na nowo :D" << endl;
}

int Potwor::getScore()
{
    return wynik;
}

void Postac::porownaj(const Potwor& monster)
{
    if (wynik1 > monster.getScore())

        cout << np << " Przegralby z " << nP;

    if (wynik1 < monster.getScore())

        cout << np << "Wygralby z " << nP;

    if (wynik1 == monster.getScore())

        cout << "Bylby remis";
}

 

*Log:

|28|error: ‘Potwor’ does not name a type| void load(); //z klasy Postać 

moze mi ktos w tym pomoc bo nie wiem gdzie tu jest problem :(

0
\033[93m

Weź to wyciągnij do jakichś stałych z sensownymi nazwami, bo teraz zaśmiecasz kod niezrozumiałymi krzaczkami.

const char[] cośtam = "\033[93m";
...
cout << cośtam << "Bla bla bla...";
0

Sam komunikat wynika z tego, że w momencie gdy masz friend class Potwor ta klasa jeszcze nie istnieje, więc kompilator nie wie z czym chcesz się zaprzyjaźnić.
Natomiast w ogóle wywal te wszystkie friend, bo nie są do niczego potrzebne i często są oznaką kiepskiego kodu.

0
main.cpp
#include <iostream>
#include "respawn.h"

using namespace std;

main()
{
Potwor mon;
mon.load();
mon.show();
mon.respawn();

Postac ch;
ch.load(); //metoda oddziedziczona po klasie Character
ch.show(); //metoda oddziedziczona po klasie Character

ch.porownaj(mon);
return 0;
}

 
respawn.h
#include <iostream>

class Character //klasa z ktorej dziedzicza klasy Postac i Potwor !
    {
protected:
    std::string nazwa, np, nP; //nazwa <-ogólna potwora,bądź postaci która po tej klasie dziedziczy, np<-nazwa potworka gdyż nie wiem jak wczytać ją z metody load() do metody porownaj() nP<-nazwa postaci też z tych samych pobudek;
    int x, y;
    int sila;
    int wytrzymalosc;
    float zdrowie;
    int inteligencja, zrecznosc;
    char odp;
    int wynik1, wynik; //wartości do porównywania kto by wygrał gdyby doszło do ewentualnego pojedynku
    const char white[10]  = "\033[0m";
    const char red[10]    = "\033[91m";
    const char green[10]  = "\033[32m";
    const char yellow[10] = "\033[93m";
    const char blue[10]   = "\033[94m";
    const char purple[10] = "\033[95m";
    const char Italic_cyan[10] = "\033[3;96m";


public:
    virtual void load() = 0;
    virtual void show() = 0;
};

class Postac : public Character {

public:
    Postac(std::string = "Mr.Nobody", int = 5, int = 5, float = 100, int = 5, int = 5); //konstruktor i wartosci domyslne tego konstruktora
    ~Postac(); //destruktor
    class Potwor;
    void load();
    void show();
    void porownaj(const Potwor& monster);
};

class Potwor : public Character {
public:
    Potwor(std::string = "Potwor", int = 5, int = 5, float = 100, int = 5, int = 5); //konstruktor i wartosci domyslne tego konstruktora
    ~Potwor(); //destruktor
    class Postac;
    void porownaj();
    void load();
    void show();
    void respawn();
    int getScore();
};

 
respawn.cpp
#include <iostream>
#include <cstdlib>
#include "respawn.h"
using namespace std;

void Postac::load() //metoda wczytujaca dane postaci
{
    cout << "Czy chcesz wprowadzić Atrybuty Postaci(t/n)?";
    cin >> odp;
    if (odp == 't' || odp == 'T') {
        cout << "\nPodaj "<<Italic_cyan<<"Nazwe Postaci"<<white<<":";
        cin >> nazwa;
        cout << "Podaj "<<yellow<<"Sile"<<white<< nazwa << "'a:";
        cin >> sila;
        cout << "Podaj "<<purple<<"Wytrzymalosc"<<white<< nazwa << "'a:";
        cin >> wytrzymalosc;
        cout << "Podaj Ilosc "<<red<<"Zdrowia"<<white << nazwa << "'a:";
        cin >> zdrowie;
        cout << "Podaj "<<green<<"Zrecznosc"<<white<< nazwa << "'a:";
        cin >> zrecznosc;
        cout << "Podaj "<<blue<<"Inteligencje"<<white<< nazwa << "'a:";
        cin >> inteligencja;
        cout << "\n";
    }
}
void Postac::show() //metoda ukazująca dane postaci
{
    system("clear");
    cout <<Italic_cyan<<"Nazwa Postaci"<<white<<":" << nazwa << endl
         <<yellow<<"Sila"<<white<<":" << sila << endl
         <<purple<<"Wytrzymalosc"<<white<<":" << wytrzymalosc << endl
         <<red<<"Zdrowie"<<white<<":" << zdrowie << endl
         <<green<<"Zrecznosc"<<white<<":" << zrecznosc << endl
         <<blue<<"Inteligencja"<<white<<":" << inteligencja << endl;
    nP = nazwa;
    wynik1 = sila + wytrzymalosc + zrecznosc + inteligencja / zdrowie;
}

Postac::Postac(string n, int s, int w, float zdr, int zr, int intel) //konstruktor klasy Postac
{
    nazwa = n;
    sila = s;
    wytrzymalosc = w;
    zdrowie = zdr;
    zrecznosc = zr;
    inteligencja = intel;
}
Postac::~Postac() //destruktor klasy Postac
{
    cout << "\nJezeli widzisz ten komunikat to znaczy,ze twoj komputer zniknie za…1…2…3 BOOM!" << endl;
}

void Potwor::load() //metoda wczytująca dane potworka
{
    cout << "Czy chcesz wprowadzić Atrybuty Potwora(t/n)?";
    cin >> odp;
    if (odp == 't' || odp == 'T') {
        cout << "\nPodaj "<<Italic_cyan<<"Nazwe Potwora"<<white<<":";
        cin >> nazwa;
        cout << "Podaj "<<yellow<<"Sile"<<white<< nazwa << "'a:";
        cin >> sila;
        cout << "Podaj "<<purple<<"Wytrzymalosc"<<white<< nazwa << "'a:";
        cin >> wytrzymalosc;
        cout << "Podaj Ilosc "<<red<<"Zdrowia"<<white<< nazwa << "'a:";
        cin >> zdrowie;
        cout << "Podaj "<<green<<"Zrecznosc"<<white<< nazwa << "'a:";
        cin >> zrecznosc;
        cout << "Podaj "<<blue<<"Inteligencje"<<white<< nazwa << "'a:";
        cin >> inteligencja;
        cout << "\n";
    }
}
void Potwor::show() //metoda ukazująca dane potworka
{
    system("clear");
    cout <<Italic_cyan<<"Nazwa Potwora"<<white<<":" << nazwa << endl
         <<yellow<< "Sila" <<white<":"<< sila << endl
         <<purple<<"Wytrzymalosc"<<white<<":" << wytrzymalosc << endl
         <<red<<"Zdrowie"<<white<<":"<< zdrowie << endl
         <<green<<"Zrecznosc"<<white<<":"<< zrecznosc << endl
         <<blue<<"Inteligencja"<<white<<":" << inteligencja << endl;
    np = nazwa;
    wynik = sila + wytrzymalosc + zrecznosc + inteligencja / zdrowie;
}

void Potwor::respawn() //metoda do respawnu potworkow ver.Pre-Alpha
{

    cout << "\nIle chcesz tych Potworów?" << endl;
    cin >> x;
    cout << "++++++++++++++++++++++++++++++++++++++++++\n";
    for (y = 1; y <= x; y++) {
        cout << "+  " << y << " " << nazwa << "                              +" << endl;
    } //koniec fora
    cout << "++++++++++++++++++++++++++++++++++++++++++\n";
} //koniec voida

Potwor::Potwor(string n, int s, int w, float zdr, int zr, int intel) //konstruktor
{
    nazwa = n;
    sila = s;
    wytrzymalosc = w;
    zdrowie = zdr;
    zrecznosc = zr;
    inteligencja = intel;
}
Potwor::~Potwor() //destruktor
{
    cout << "\nMozna dzialac na nowo :D" << endl;
}

int Potwor::getScore()
{
    return wynik;
}

void Postac::porownaj(const Potwor& monster)
{
    if (wynik1 > monster.getScore())

        cout << np << " Przegralby z " << nP;

    if (wynik1 < monster.getScore())

        cout << np << "Wygralby z " << nP;

    if (wynik1 == monster.getScore())

        cout << "Bylby remis";
}

 
0

Masz class Potwor wewnątrz klasy Postac, przez co funkcja porównaj oczekuje argumentu typu Postac::Potwor. Wywal to.
Wcześniej mówiąc wywal te wszystkie friend miałem na myśli całe linie, a nie tylko słowo friend.

0

w porządku wywaliłem ale teraz pokazuje mi błąd ‘Potwor’ does not name a type w linii void porownaj(const Potwor& monster); w klasie Postac -

Bo Potwor został zadeklarowany po Postac, więc wewnątrz Postac kompilator nie wie co to jest Potwor. Przenieś Potwor przed Postac, albo najlepiej każda klasa jest we własnych plikach .h/.cpp, czyli Postac.h Postac.cpp oraz Potwor.h Potwor.cpp.

0

Okej zrobiłem to jak chciałeś czyli rozdzieliłem klasy na nagłówki i tak to u mnie wygląda :

main.cpp
#include <iostream>
#include "Potwor.h"
#include "Postac.h"

using namespace std;

int main()
{
Potwor mon;
mon.load();
mon.show();
mon.respawn();

Postac ch;
ch.load(); //metoda oddziedziczona po klasie Character
ch.show(); //metoda oddziedziczona po klasie Character

ch.porownaj(mon);
return 0;
}

 
Postac.h 

#include <iostream>


class Postac : public Character {

public:
    Postac(std::string = "Mr.Nobody", int = 5, int = 5, float = 100, int = 5, int = 5); //konstruktor i wartosci domyslne tego konstruktora
    ~Postac(); //destruktor

    void load();
    void show();
    void porownaj(const Potwor& monster);
};



Postac.cpp
#include <iostream>
#include <cstdlib>
#include "Potwor.h"
#include "Postac.h"
using namespace std;

void Postac::load() //metoda wczytujaca dane postaci
{
    cout << "Czy chcesz wprowadzić Atrybuty Postaci(t/n)?";
    cin >> odp;
    if (odp == 't' || odp == 'T') {
        cout << "\nPodaj "<<Italic_cyan<<"Nazwe Postaci"<<white<<":";
        cin >> nazwa;
        cout << "Podaj "<<yellow<<"Sile"<<white<< nazwa << "'a:";
        cin >> sila;
        cout << "Podaj "<<purple<<"Wytrzymalosc"<<white<< nazwa << "'a:";
        cin >> wytrzymalosc;
        cout << "Podaj Ilosc "<<red<<"Zdrowia"<<white << nazwa << "'a:";
        cin >> zdrowie;
        cout << "Podaj "<<green<<"Zrecznosc"<<white<< nazwa << "'a:";
        cin >> zrecznosc;
        cout << "Podaj "<<blue<<"Inteligencje"<<white<< nazwa << "'a:";
        cin >> inteligencja;
        cout << "\n";
    }
}
void Postac::show() //metoda ukazująca dane postaci
{
    system("clear");
    cout <<Italic_cyan<<"Nazwa Postaci"<<white<<":" << nazwa << endl
         <<yellow<<"Sila"<<white<<":" << sila << endl
         <<purple<<"Wytrzymalosc"<<white<<":" << wytrzymalosc << endl
         <<red<<"Zdrowie"<<white<<":" << zdrowie << endl
         <<green<<"Zrecznosc"<<white<<":" << zrecznosc << endl
         <<blue<<"Inteligencja"<<white<<":" << inteligencja << endl;
    nP = nazwa;
    wynik1 = sila + wytrzymalosc + zrecznosc + inteligencja / zdrowie;
}

Postac::Postac(string n, int s, int w, float zdr, int zr, int intel) //konstruktor klasy Postac
{
    nazwa = n;
    sila = s;
    wytrzymalosc = w;
    zdrowie = zdr;
    zrecznosc = zr;
    inteligencja = intel;
}
Postac::~Postac() //destruktor klasy Postac
{
    cout << "\nJezeli widzisz ten komunikat to znaczy,ze twoj komputer zniknie za…1…2…3 BOOM!" << endl;
}


void Postac::porownaj(const Potwor& monster)
{
    if (wynik1 > monster.getScore())

        cout << np << " Przegralby z " << nP;

    if (wynik1 < monster.getScore())

        cout << np << "Wygralby z " << nP;

    if (wynik1 == monster.getScore())

        cout << "Bylby remis";
}

 
Potwor.h 
#include <iostream>
#include "Character.h"

class Potwor : public Character {
public:
    Potwor(std::string = "Potwor", int = 5, int = 5, float = 100, int = 5, int = 5); //konstruktor i wartosci domyslne tego konstruktora
    ~Potwor(); //destruktor


    void load();
    void show();
    void respawn();
    int getScore() const;
};

Potwor.cpp
#include <iostream>
#include <cstdlib>
#include "Potwor.h"
#include "Postac.h"

using namespace std;

void Potwor::load() //metoda wczytująca dane potworka
{
    cout << "Czy chcesz wprowadzić Atrybuty Potwora(t/n)?";
    cin >> odp;
    if (odp == 't' || odp == 'T') {
        cout << "\nPodaj "<<Italic_cyan<<"Nazwe Potwora"<<white<<":";
        cin >> nazwa;
        cout << "Podaj "<<yellow<<"Sile"<<white<< nazwa << "'a:";
        cin >> sila;
        cout << "Podaj "<<purple<<"Wytrzymalosc"<<white<< nazwa << "'a:";
        cin >> wytrzymalosc;
        cout << "Podaj Ilosc "<<red<<"Zdrowia"<<white<< nazwa << "'a:";
        cin >> zdrowie;
        cout << "Podaj "<<green<<"Zrecznosc"<<white<< nazwa << "'a:";
        cin >> zrecznosc;
        cout << "Podaj "<<blue<<"Inteligencje"<<white<< nazwa << "'a:";
        cin >> inteligencja;
        cout << "\n";
    }
}
void Potwor::show() //metoda ukazująca dane potworka
{
    system("clear");
    cout <<Italic_cyan<<"Nazwa Potwora"<<white<<":" << nazwa <<endl
         <<yellow<< "Sila" <<white<":"<< sila << endl
         <<purple<<"Wytrzymalosc"<<white<<":" << wytrzymalosc << endl
         <<red<<"Zdrowie"<<white<<":"<< zdrowie << endl
         <<green<<"Zrecznosc"<<white<<":"<< zrecznosc << endl
         <<blue<<"Inteligencja"<<white<<":" << inteligencja << endl;
    np = nazwa;
    wynik = sila + wytrzymalosc + zrecznosc + inteligencja / zdrowie;
}

void Potwor::respawn() //metoda do respawnu potworkow ver.Pre-Alpha
{

    cout << "\nIle chcesz tych Potworów?" << endl;
    cin >> x;
    cout << "++++++++++++++++++++++++++++++++++++++++++\n";
    for (y = 1; y <= x; y++) {
        cout << "+  " << y << " " << nazwa << "                              +" << endl;
    } //koniec fora
    cout << "++++++++++++++++++++++++++++++++++++++++++\n";
} //koniec voida

Potwor::Potwor(string n, int s, int w, float zdr, int zr, int intel) //konstruktor
{
    nazwa = n;
    sila = s;
    wytrzymalosc = w;
    zdrowie = zdr;
    zrecznosc = zr;
    inteligencja = intel;
}
Potwor::~Potwor() //destruktor
{
    cout << "\nMozna dzialac na nowo :D" << endl;
}

int Potwor::getScore()
{
    return wynik;
}

 
Character.h
class Character //klasa z ktorej dziedzicza klasy Postac i Potwor !
    {
protected:
    std::string nazwa, np, nP; //nazwa <-ogólna potwora,bądź postaci która po tej klasie dziedziczy, np<-nazwa potworka gdyż nie wiem jak wczytać ją z metody load() do metody porownaj() nP<-nazwa postaci też z tych samych pobudek;
    int x, y;
    int sila;
    int wytrzymalosc;
    float zdrowie;
    int inteligencja, zrecznosc;
    char odp;
    int wynik1, wynik; //wartości do porównywania kto by wygrał gdyby doszło do ewentualnego pojedynku
    const std::string white  = "\033[0m";
    const std::string red    = "\033[91m";
    const std::string green  = "\033[32m";
    const std::string yellow = "\033[93m";
    const std::string blue  = "\033[94m";
    const std::string purple = "\033[95m";
    const std::string Italic_cyan = "\033[3;96m";


public:
    virtual void load() = 0;
    virtual void show() = 0;
};

Edit: I mój aktualny błąd jaki wyskoczył przy kompilacji :

error: initializer-string for array of chars is too long [-fpermissive]|

i wskazuje na
const char white[] = "\033[0m";
const char red[] = "\033[91m";
const char green[] = "\033[32m";
const char yellow[] = "\033[93m";
const char blue[] = "\033[94m";
const char purple[] = "\033[95m";
const char Italic_cyan[] = "\033[3;96m";

Edit2: Uaktualniłem kod jakby co !
0

A właśnie jakbym chciał stworzyć inkrementacje obiektów danej klasy(coś na wzór metody respawn tylko zamiast

string nazwa

obiekt i tyle tworzy obiektów ile chcemy) to jak można to zrobić ?

0

Nadal nie rozumiem, ale strzelając jak ślepa wróżka w bezksiężycową noc

vector<Monster> monsters(howMany);      // teraz w monsters masz howMany obiektów

1 użytkowników online, w tym zalogowanych: 0, gości: 1