我正在构建一个国际象棋游戏。我有一个基类 gamePiece 和一个名为 rook 的派生类。
我最初想将所有不同类型的片段放在一个向量中,并用迭代器遍历它。但是,我之前发现我无法在 gamePiece 对象的向量中插入 rook 对象。
许多人建议我改用指针来完成我需要的工作——建议使用智能指针,特别是 unique_ptr 和 shared_ptr。要查看我上一个问题中的讨论,请参阅以下链接:
为 unique_ptr 建议的具体技术在这里:
vector<std::unique_ptr<gamePiece>> vectorOfPointersToGamePieces;
std::unique_ptr<gamePiece> rk( new rook(1, "Rook", 'A', 1, "White", "Up") );
vectorOfPointersToGamePieces.push_back(std::move(rk));
shared_ptr 的具体技术在这里:
vector<std::shared_ptr<gamePiece>> vectorOfPointersToGamePieces;
vectorOfPointersToGamePieces.push_back(std::make_shared<rook>(1, "Rook", 'A', 1, "White", "Up") );
但是,这些技术似乎都不适合我。实际上,我应该再澄清一点——它部分有效。当与“rook”(派生)对象一起使用时,显示函数报告我的字符串是空的并且变量看起来是未初始化的,即使构造函数中的所有内容似乎都工作正常。
然而,当这些技术与“gamePiece”(基础)对象一起使用时,显示功能完美地显示了所有内容......因此,必须有一个原因为什么它可以完美地与基类对象一起使用,但不能与派生对象一起使用。
我是否缺少某种步骤(例如,在将“车”放入矢量之前,我是否需要将“车”放入“游戏块”中……)?我还在某处的另一篇文章中读到某些类型的智能指针不能进入 STL 容器。这是其中一种情况吗?或者它可能没有认识到 rook 是 gamePiece 的派生对象。那堂课在下面。
class rook: public gamePiece
{
public:
rook(int player, string type, char file, int rank, string color, string facing)
{
gamePiece(player, type, file, rank, color, facing);
}
};