无法使用 shared_ptr 将 child 类型的元素推送到 base 类型的向量
Unable to push an element of type child to a vector of type base using shared_ptr
基于 this answer,似乎以下代码应该有效:
文件Board.h:
std::vector<std::shared_ptr<Piece>> pawnRow;
for (int x = 0; x < 8; x++)
{
pawnRow.push_back(std::make_shared<Pawn>());
}
参考Pawn.h:
#include "Piece.h"
class Pawn : Piece
{};
相反,我得到:error: no matching function for call to 'std::vector<std::shared_ptr<Piece> >::push_back(std::shared_ptr<Pawn>)'
我在这里错过了什么?我的最终目标是拥有一个“片段”向量,我可以调用像 possibleMoveLocations()
这样的函数,它将调用子 class.
中的重载函数
使用 C++20,gcc 版本 11.2.0 (MSYS2),Windows11
根据@Barry 的评论,我必须像这样公开继承 Piece
:
#include "Piece.h"
class Pawn : public Piece
{};
之后编译的代码就好了!
基于 this answer,似乎以下代码应该有效:
文件Board.h:
std::vector<std::shared_ptr<Piece>> pawnRow;
for (int x = 0; x < 8; x++)
{
pawnRow.push_back(std::make_shared<Pawn>());
}
参考Pawn.h:
#include "Piece.h"
class Pawn : Piece
{};
相反,我得到:error: no matching function for call to 'std::vector<std::shared_ptr<Piece> >::push_back(std::shared_ptr<Pawn>)'
我在这里错过了什么?我的最终目标是拥有一个“片段”向量,我可以调用像 possibleMoveLocations()
这样的函数,它将调用子 class.
使用 C++20,gcc 版本 11.2.0 (MSYS2),Windows11
根据@Barry 的评论,我必须像这样公开继承 Piece
:
#include "Piece.h"
class Pawn : public Piece
{};
之后编译的代码就好了!