我如何使用抽象对象数组?无效的抽象类型错误
How do i use an Array of abstract objects? Invalid abstract type error
我正在用 C++ 编写国际象棋游戏,Player 有一个包含 16 个 棋子 的数组,这是一个抽象 class 对于每个单独的棋子(马、兵、国王等)。编译器为 'pecas' 提供了一个“无效的抽象类型 'Peca'”。我做错了什么?谢谢!
Player.h
#include "Peca.h" // Includes Piece abstract class
using std::string;
class Jogador
{
private:
static int numeroDeJogador; //PlayerNumber (0-1)
string nome;
Peca pecas[16]; //This is the array of the abstract class Pecas (Pieces), where i want to put derived objects like Horse, king..
public:
string getNomeJogador(); // Return the player name
};
Pieces.h
#ifndef PECA_H
#define PECA_H
#include <string>
using std::string;
class Peca {
private:
int cor; //0 para as brancas, 1 para as pretas
bool emJogo;
public:
Peca(int cor);
virtual string desenha() = 0;
virtual bool checaMovimento(int linhaOrigem, int colunaOrigem, int linhaDestino, int colunaDestino) = 0;
int getCor();
bool estaEmJogo();
void setForaDeJogo(bool estado);
};
#endif
派生 class 示例:
#include "Peca.h"
using std::string;
class Cavalo : public Peca {
public:
Cavalo(int cor);
bool checaMovimento(int linhaOrigem, int colunaOrigem, int linhaDestino, int colunaDestino);
string desenha();
};
数组要求数组的对象是可构造的。你不能构建一个 Peca
所以你不能拥有它们的数组。
您需要的是指向 Peca
的指针容器。指针总是可构造的,即使它们指向的东西不能构造。在这种情况下,您可以使用 std::array<std::unique_ptr<Peca>, 16> pecas
以便拥有一个托管指针数组。
我正在用 C++ 编写国际象棋游戏,Player 有一个包含 16 个 棋子 的数组,这是一个抽象 class 对于每个单独的棋子(马、兵、国王等)。编译器为 'pecas' 提供了一个“无效的抽象类型 'Peca'”。我做错了什么?谢谢!
Player.h
#include "Peca.h" // Includes Piece abstract class
using std::string;
class Jogador
{
private:
static int numeroDeJogador; //PlayerNumber (0-1)
string nome;
Peca pecas[16]; //This is the array of the abstract class Pecas (Pieces), where i want to put derived objects like Horse, king..
public:
string getNomeJogador(); // Return the player name
};
Pieces.h
#ifndef PECA_H
#define PECA_H
#include <string>
using std::string;
class Peca {
private:
int cor; //0 para as brancas, 1 para as pretas
bool emJogo;
public:
Peca(int cor);
virtual string desenha() = 0;
virtual bool checaMovimento(int linhaOrigem, int colunaOrigem, int linhaDestino, int colunaDestino) = 0;
int getCor();
bool estaEmJogo();
void setForaDeJogo(bool estado);
};
#endif
派生 class 示例:
#include "Peca.h"
using std::string;
class Cavalo : public Peca {
public:
Cavalo(int cor);
bool checaMovimento(int linhaOrigem, int colunaOrigem, int linhaDestino, int colunaDestino);
string desenha();
};
数组要求数组的对象是可构造的。你不能构建一个 Peca
所以你不能拥有它们的数组。
您需要的是指向 Peca
的指针容器。指针总是可构造的,即使它们指向的东西不能构造。在这种情况下,您可以使用 std::array<std::unique_ptr<Peca>, 16> pecas
以便拥有一个托管指针数组。