Potrzebuję pomocy.
Mam takie coś:
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <list>
#include <stdlib.h>
using namespace std;
enum Player
{
BLACK,
WHITE
};
struct position
{
int x;
int y;
};
/* z uwagi na to że klasa zawiera przynajmniej jedną funkcję czysto wirtualną będzie klasą abstrakcyjną */
class Piece
{
public:
Player user;
position pos;
virtual list<position> move()
{
list<position> lista;
return lista;
}
virtual int value() const = 0;
Piece(Player u, position p) : user(u), pos(p) { } // definicja dwuparametrowego konstruktora klasy
};
/* klasy dziedziczące po klasie abstrakcyjnej Piece : Pawn, Rook, Knight, Bishop, Queen, King */
class Pawn : public Piece
{
public:
Pawn(Player u, position p) : Piece(u, p) { } // wywołujemy konstruktor abstrakcyjnej bazowej klasy Piece
int value()
{
return 1;
}
};
class Rook : public Piece
{
public:
Rook(Player u, position p) : Piece(u, p) { } // wywołujemy konstruktor abstrakcyjnej bazowej klasy Piece
int value()
{
return 5;
}
};
class Knight : public Piece
{
public:
Knight(Player u, position p) : Piece(u, p) { } // wywołujemy konstruktor abstrakcyjnej bazowej klasy Piece
int value()
{
return 3;
}
};
class Bishop : public Piece
{
public:
Bishop(Player u, position p) : Piece(u, p) { } // wywołujemy konstruktor abstrakcyjnej bazowej klasy Piece
int value()
{
return 3;
}
};
class Queen : public Piece
{
public:
Queen(Player u, position p) : Piece(u, p) { } // wywołujemy konstruktor abstrakcyjnej bazowej klasy Piece
int value()
{
return 9;
}
};
class King : public Piece
{
public:
King(Player u, position p) : Piece(u, p) { } // wywołujemy konstruktor abstrakcyjnej bazowej klasy Piece
int value()
{
return 0;
}
};
int main()
{
/* utworzenie nowej listy bierek na szachownicy - lista pusta po utworzeniu */
list<Piece> lista;
return 0;
}
W momencie gdy taką listę chcę zrobić tym poleceniem :
list<Piece> lista;
dostaję komunikat że nie można utworzyć instancji klasy abstrakcyjnej.
Mam dwa pytania:
- Jak utworzyć listę obiektów wywodzących się z klas dziedziczących po klasie abstrakcyjnej w c++ ?
- Dlaczego kompilator próbuje w ogóle tworzyć instancję klasy abstrakcyjnej ? (przecież ja tworzę tylko listę a nie obiekt klasy abstrakcyjnej)