• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z grą "undefined reference to 'vtable for Player'

Object Storage Arubacloud
0 głosów
1,871 wizyt
pytanie zadane 19 października 2017 w C i C++ przez Utau Użytkownik (900 p.)

Jestem w trakcie projektowania prostej gierki konsolowej.

Wywala błąd "undefined reference to 'vtable for Player'.

Wrzucam kod:

(main.cpp)

#include "postacie.h"

using namespace std;

const int ROZMIAR_PLANSZY = 50;

int main()
{
    //deklaracja obiektow i tablicy planszy
    char plansza[ROZMIAR_PLANSZY][ROZMIAR_PLANSZY];
    Player p;

    //wypelnienie planszy wartosciami domyslnymi
    for (int i=0; i<ROZMIAR_PLANSZY; i++){
        for(int j=0; j<ROZMIAR_PLANSZY; j++){
            if(i==p.pozycjaX && j==p.pozycjaY){
                plansza[i][j] = p.symbol;
            }else plansza[i][j] = '\0';
        }
    }

    //rysowanie planszy
    for(int i=0; i<ROZMIAR_PLANSZY+4; i++){
        cout<<"=";
    }
    cout<<endl;
    for(int j=0; j<ROZMIAR_PLANSZY; j++){
        cout<<"||";
        for(int i=0; i<ROZMIAR_PLANSZY; i++){
            cout<<plansza[i][j];
        }
        cout<<"||"<<endl;
    }
    for(int i=0; i<ROZMIAR_PLANSZY+4; i++){
        cout<<"=";
    }
    cout<<endl;

    return 0;
}

(postacie.h)

#include <iostream>
#include <cstdlib>
#include <time.h>

int poz_X;
int poz_Y;

int losujPozycjeX(int a)
{
    srand(time(NULL));
    a = rand()%50 + 1;
    return a;
}

int losujPozycjeY(int a)
{
    srand(time(NULL));
    a = rand()%50 + 1;
    return a;
}

class Postac
{
public:
    virtual void zmienPozycje() = 0;
};

class Monster: public Postac
{
    int pozycjaX;
    int pozycjaY;
    char symbol;

public:
    Monster(int a,int b,char name='M')
    {
        pozycjaX=a;
        pozycjaY=b;
        symbol=name;
    }
    void zmienPozycje(int a, int b);
    void zniszcz(int a, int b, char name);
};

class Player: public Postac
{
public:

    int pozycjaX;
    int pozycjaY;
    int zycia;
    char symbol;

    Player(int a=losujPozycjeX(poz_X),int b=losujPozycjeY(poz_Y), int c=3, char s='P')
    {
        pozycjaX=a;
        pozycjaY=b;
        zycia=c;
        symbol=s;
    }

    void zmienPozycje();
    void smierc(int a, int b, char c, char d, int e);
};

Gierka narazie jest w fazie budowania :p

komentarz 19 października 2017 przez niezalogowany
Błąd dotyczy której linii?
komentarz 19 października 2017 przez Utau Użytkownik (900 p.)
Błąd dotyczy linii 55

1 odpowiedź

+1 głos
odpowiedź 19 października 2017 przez Kodeman Gaduła (4,480 p.)
edycja 19 października 2017 przez Kodeman
 
Najlepsza

Zrobiłaś w klasie Postac metodę wirtualną, która nie przyjmuje argumentów. Potem ją dziedziczysz, ale posiadasz w niej 2 argumenty, czyli teoretycznie to całkiem inna metoda.

Do tego musisz stworzyć ciało tej metody. Czyli, nawet jeśli jej nie używasz, to stwórz 

void Monster::zmienPozycje()
{
}

Błąd vtable wyskakuje, gdy masz metodę wirtualną, ale kompilator nie może znaleźć odpowiedniej metody, która ją przesłoni.

 

Tak samo klasa Player. Jeśli wywołasz funkcję zmienPozycję, to co ma się zrobić? Nie ma program gdzie wskoczyć.

komentarz 19 października 2017 przez Utau Użytkownik (900 p.)
Działa!

Dzięki :)

(ps. jestem dziewczyną)
komentarz 19 października 2017 przez Kodeman Gaduła (4,480 p.)
Wybacz ;)

Podobne pytania

0 głosów
2 odpowiedzi 634 wizyt
0 głosów
2 odpowiedzi 793 wizyt
0 głosów
1 odpowiedź 172 wizyt
pytanie zadane 22 stycznia 2023 w C i C++ przez Kamix02 Nowicjusz (120 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...