C++ 试图初始化将对象作为构造函数中的值的映射

C++ 试图初始化将对象作为构造函数中的值的映射,c++,class,map,C++,Class,Map,我一直在环顾四周试图解决这个问题,我得到的最接近的是这个问题,但它似乎不起作用。 如果有人知道一个解决方案,那么我很想知道,否则我会把我的问题说出来。我想创建一批棋子,为此我创建了一个“棋盘”类和一个“棋子”类,这是一个所有棋子和骑士等继承的超类。这是“ChessBoard.h”) 在Pawn类声明中。 如果有人知道该怎么做,我很想知道,谢谢你们能给我的任何帮助 类片段中必须定义了一个纯虚拟方法。类似于virtualintfoo()=0您需要在我们的类Pawn中实现类片段中的所有纯虚拟方法,以便

我一直在环顾四周试图解决这个问题,我得到的最接近的是这个问题,但它似乎不起作用。 如果有人知道一个解决方案,那么我很想知道,否则我会把我的问题说出来。我想创建一批棋子,为此我创建了一个“棋盘”类和一个“棋子”类,这是一个所有棋子和骑士等继承的超类。这是“ChessBoard.h”)

在Pawn类声明中。
如果有人知道该怎么做,我很想知道,谢谢你们能给我的任何帮助

类片段中必须定义了一个纯虚拟方法。类似于
virtualintfoo()=0您需要在我们的类Pawn中实现类片段中的所有纯虚拟方法,以便“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()

错误消息表示您尚未覆盖
Piece
中的所有抽象成员函数。确保确实覆盖了抽象函数的签名,而不是类似的签名:参数类型和成员的常量不能不同


也就是说,您可能不应该使用
std::map
来表示您的板!使用二维数组(或对行和列具有适当访问函数的一维数组)可能是更好的选择。如果您坚持使用<代码> STD::MAP<代码>,请考虑使用<代码> STD::配对< /代码>或<代码> STD::数组< /代码>作为键。我忘记实现虚拟方法了,谢谢你的帮助!啊,是的!我有一个纯虚拟的方法,我不知道这是个问题。谢谢你的帮助,我已经把头撞在墙上好一阵子了。我会尽量确保下次添加更多细节。(对不起,我不能投赞成票,我的代表太低了!)谢谢你的快速回复!我不认为这是我的虚拟问题,这是它的关键。是的,我的向量方法有点不可靠,你的建议看起来更可靠。谢谢
    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;
    }
}
class Pawn: public Piece {
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()