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

Błąd wyrzucany przez kompilator w destruktorze

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
175 wizyt
pytanie zadane 4 czerwca 2017 w C i C++ przez Eryk Chojnacki Obywatel (1,420 p.)

Piszę program, w którym można by pograć w minigierki. Piszę go przy użycia wskaźnika polimorficznego.

main.cpp

#include <iostream>
#include <conio.h>
#include "TicTacToe.h"
#include "Gra.h"
using namespace std;
int numergry=0;
int liczba;

int main()
{
    cout << "Witaj!" << endl;
    cout<<"Wybierz minigre: "<<endl;
    cout<<"1. Kolko i krzyzyk"<<endl;
    cout<<"2. Wkrotce";
    switch(liczba)
    {
        case 1:
           numergry=1;
        break;
        case 2:
            numergry=2;
        break;
        default:
            return false;
        break;
    }

    TicTacToe plansza1('n','n','n','n','n','n','n','n','n','o',0);
    //Snake snake1;
    Gra *wsk;

    if(numergry==1)
    {
        wsk=&plansza1;
        wsk->wyswietl();
    }
    /*
    else if(numergry==2)
    {
        wsk=&snake1;
        wsk->gotoxy();
    }
    */
    return 0;
}


TicTacToe.h

#include "Gra.h"
class TicTacToe :public Gra
{
private:
    char p1, p2, p3, p4, p5, p6, p7, p8, p9;
    char tura;
    int pomocnicza;
public:
    void wyswietl();
    void gra();
    void wygrana();
    void remis();
    void odnowa();
    TicTacToe(char,char,char,char,char,char,char,char,char,char,int);
    ~TicTacToe();
    friend class Gra;
};

TicTacToe.cpp

#include <iostream>
#include <conio.h>
#include "TicTacToe.h"
#include "Gra.h"
using namespace std;

void TicTacToe::wyswietl()
{
    cout<<"Kolko i krzyzyk!"<<endl;
    cout<<endl;
    cout<<p1<<"|"<<p2<<"|"<<p3<<endl;
    cout<<"- - -"<<endl;
    cout<<p4<<"|"<<p5<<"|"<<p6<<endl;
    cout<<"- - -"<<endl;
    cout<<p7<<"|"<<p8<<"|"<<p9<<endl;
}
void TicTacToe::gra()
{
    if(tura=='o')
    {
        cout<<"Kliknij numer pola";
        if(getch()=='1')
        {
            p1='o';
        }
        else if(getch()=='2')
        {
            p2='o';
        }
        else if(getch()=='3')
        {
            p3='o';
        }
        else if(getch()=='4')
        {
            p4='o';
        }
        else if(getch()=='5')
        {
            p5='o';
        }
        else if(getch()=='6')
        {
            p6='o';
        }
        else if(getch()=='7')
        {
            p7='o';
        }
        else if(getch()=='8')
        {
            p8='o';
        }
        else if(getch()=='9')
        {
            p9='o';
        }
        else
        {
            cout<<"Nieprawid³owy klawisz";
            TicTacToe::wyswietl();
        }
        TicTacToe::tura='x';
    }
    else
    {
        cout<<"Kliknij numer pola";
        if(getch()=='1')
        {
            p1='x';
        }
        else if(getch()=='2')
        {
            p2='o';
        }
        else if(getch()=='3')
        {
            p3='x';
        }
        else if(getch()=='4')
        {
            p4='x';
        }
        else if(getch()=='5')
        {
            p5='x';
        }
        else if(getch()=='6')
        {
            p6='x';
        }
        else if(getch()=='7')
        {
            p7='x';
        }
        else if(getch()=='8')
        {
            p8='x';
        }
        else if(getch()=='9')
        {
            p9='x';
        }
        else
        {
            cout<<"Nieprawid³owy klawisz";
            TicTacToe::wyswietl();
        }
        TicTacToe::tura='o';
    }
}
void TicTacToe::wygrana()
{
    if((p1='o' && p2==p1 && p3==p2) || (p4='o' && p5==p4 && p6==p5) || (p7='o' && p8==p7 && p9==p8 ) ||
       (p1='o' && p4==p1 && p7==p4) || (p2='o' && p5==p2 && p8==p5) || (p3='o' && p6==p3 && p9==p6) ||
       (p1='o' && p5==p1 && p9==p5) || (p3='o' && p5==p3 && p7==p5))
    {
        cout<<"Wygrywa kolko!";
        TicTacToe::pomocnicza=1;
        while(TicTacToe::pomocnicza==1)
        {
            if(getch()=='1'||'2'||'3'||'4'||'5'||'6'||'7'||'8'||'9')
            {
                p1='n'; p2='n'; p3='n'; p4='n'; p5='n'; p6='n'; p7='n'; p8='n'; p9='n';
            }
        }
    }
    if((p1='x' && p2==p1 && p3==p2) || (p4='x' && p5==p4 && p6==p5) || (p7='x' && p8==p7 && p9==p8 ) ||
       (p1='x' && p4==p1 && p7==p4) || (p2='x' && p5==p2 && p8==p5) || (p3='x' && p6==p3 && p9==p6) ||
       (p1='x' && p5==p1 && p9==p5) || (p3='x' && p5==p3 && p7==p5))
    {
        cout<<"Wygrywa krzyzyk!";
        TicTacToe::pomocnicza=1;
        while(TicTacToe::pomocnicza==1)
        {
            if(getch()=='1'||'2'||'3'||'4'||'5'||'6'||'7'||'8'||'9')
            {
                p1='n'; p2='n'; p3='n'; p4='n'; p5='n'; p6='n'; p7='n'; p8='n'; p9='n';
            }
        }
    }

}
void TicTacToe::remis()
{
    if(p1!='n'&& p1!='n'&& p2!='n'&& p3!='n'&& p4!='n'&& p5!='n'&& p6!='n'&& p7!='n'&& p8!='n'&& p9!='n' && TicTacToe::pomocnicza!=1)
    {
        cout<<"Remis!";
    }
}
void TicTacToe::odnowa()
{
    TicTacToe::wyswietl();
}
TicTacToe::TicTacToe(char p1,char p2,char p3,char p4,char p5,char p6,char p7,char p8,char p9,char tura, int pomocnicza)
{
    p1='n';p2='n';p3='n';p4='n';p5='n';p6='n';p7='n';p8='n';p9='n';
}



Gra.h

#pragma once

class Gra
{
public:
    virtual void wyswietl()=0;
};


Błąd:
In function `main':|
main.cpp|44|undefined reference to `TicTacToe::~TicTacToe()'|
main.cpp|44|undefined reference to `TicTacToe::~TicTacToe()'|
error: ld returned 1 exit status|

Nie rozumiem dlaczego kompilator przyczepia się do destruktora. Jakieś propozycje?

2 odpowiedzi

0 głosów
odpowiedź 4 czerwca 2017 przez Evelek Nałogowiec (28,960 p.)
Może to, że jest jego prototyp: ~TicTacToe(); Ale nie ma definicji.
komentarz 4 czerwca 2017 przez Eryk Chojnacki Obywatel (1,420 p.)
Po poprawieniu:

 

TicTacToe.cpp|159|error: declaration of 'TicTacToe::~TicTacToe()' outside of class is not definition [-fpermissive]|

?
0 głosów
odpowiedź 4 czerwca 2017 przez MetGang Nałogowiec (34,360 p.)
A gdzie masz ciało destruktora? Tam samo gdzie masz wirtualny destruktor w klasie Gra?

Podobne pytania

0 głosów
1 odpowiedź 171 wizyt
0 głosów
2 odpowiedzi 371 wizyt
pytanie zadane 3 kwietnia 2018 w C i C++ przez pewien_programista Obywatel (1,070 p.)
+1 głos
1 odpowiedź 358 wizyt
pytanie zadane 1 lipca 2022 w C i C++ przez polandonion Dyskutant (7,560 p.)

93,187 zapytań

142,203 odpowiedzi

322,017 komentarzy

62,513 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2365p. - dia-Chann
  2. 2326p. - Łukasz Piwowar
  3. 2315p. - Łukasz Eckert
  4. 2301p. - CC PL
  5. 2269p. - Tomasz Bielak
  6. 2235p. - Łukasz Siedlecki
  7. 2232p. - rucin93
  8. 2169p. - Marcin Putra
  9. 2164p. - Adrian Wieprzkowicz
  10. 2006p. - Michal Drewniak
  11. 1901p. - Mikbac
  12. 1806p. - Dawid128
  13. 1744p. - rafalszastok
  14. 1734p. - Anonim 3619784
  15. 1487p. - Michał Telesz
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...