gpt4 book ai didi

c++ - 尝试初始化将对象作为构造函数中的值的映射

转载 作者:行者123 更新时间:2023-11-28 07:16:30 26 4
gpt4 key购买 nike

我一直在寻找解决这个问题的方法,我得到的最接近的是这个问题 How do you initialize a map which takes a struct as value? ,但是它似乎没有用。如果有人知道解决方案,那么我很想知道,否则我会解决我的问题。我想创建一批棋子,为此我创建了一个类“ChessBoard”和一个类“Pieces”,这是所有棋子和骑士等继承的父类(super class)。这是“ChessBoard.h”)

    class ChessBoard {
protected:
map< vector<int>, Piece* > chess_pieces;
public:
ChessBoard();
};

现在我还有一个“Piece”的子类,即“Pawn”。我想将 Pawn 类型的元素指定为 chess_pieces 之一。因此,在棋盘构造函数中,我有以下几行:

    ChessBoard::ChessBoard()
{
/* Initialise white pieces */
/* First we set up the pawns: */
for (int j = 0; j < 8; j++) {
vector<int> v = {1, j};
chess_pieces[v] = new Pawn;
}
}

但是,编译器给了我一个警告,让我进行“新 Pawn”分配,说我正在“分配抽象类类型 Pawn 的对象”。这是不允许的吗?我用默认构造函数定义了“Pawn”类,“Piece”类也有默认构造函数。此外,我已确保包含该行

class Pawn: public Piece {

在 Pawn 类声明中。如果有人知道如何实现这一点,我很想知道,感谢你们给我的任何帮助!

最佳答案

您的类 Piece 必须在其中定义了一个纯虚方法。类似于 virtual int foo() = 0; 您需要在我们的类 Pawn 中实现类 Piece 中的所有纯虚方法,以便“new Pawn”工作。

最好在您的问题中提供尽可能多的细节,否则其他人将不得不猜测您的真正问题。

这是一个快速示例程序,用于说明问题和编译器的输出:

class Piece
{
public:
Piece() {}
virtual ~Piece() {}

virtual int foo() = 0;
};

class Pawn: public Piece
{
};

int main(int argc, char *argv)
{
Pawn *p = new Pawn;
delete p;
return 0;
}

:!g++ virtual.cpp
virtual.cpp: In function ‘int main(int, char*)’:
virtual.cpp:16: error: cannot allocate an object of abstract type ‘Pawn’
virtual.cpp:11: note: because the following virtual functions are pure within ‘Pawn’:
virtual.cpp:7: note: virtual int Piece::foo()

关于c++ - 尝试初始化将对象作为构造函数中的值的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20156470/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com