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?