我想从函数返回一个Piece
。 Piece
是我所有作品的抽象类父级。
Piece* Board::getPieceBySign(char sign, Player& _player1, Player& _player2, Player& _emptyPlayer, int row, int col) const
{
switch (sign) {
case Piece::B_KING:
// Example: King(Player& p, const int row, const int col, Board& b);
return new King(_player1, row, col, *this);
case Piece::B_QUEEN:
return new Queen(_player1, row, col, *this);
case Piece::B_ROOK:
return new Rook(_player1, row, col, *this);
case Piece::B_KNIGHT:
return new Knight(_player1, sign, row, col, *this);
case Piece::B_BISHOP:
return new Bishop(_player1, sign, row, col, *this);
case Piece::B_PAWN:
return new Pawn(_player1, sign, row, col, *this);
case Piece::W_KING:
return new King(_player2, sign, row, col, *this);
case Piece::W_QUEEN:
return new Queen(_player2, sign, row, col, *this);
case Piece::W_ROOK:
return new Rook(_player2, sign, row, col, *this);
case Piece::W_KNIGHT:
return new Knight(_player2, sign, row, col, *this);
case Piece::W_BISHOP:
return new Bishop(_player2, sign, row, col, *this);
case Piece::W_PAWN:
return new Pawn(_player2, sign, row, col, *this);
case Piece::EMPTY:
return nullptr;
}
}
在每一行中,我都会收到一个错误,指出参数不正确。但这不是真的。也许是因为我尝试初始化 switch
内部的内存?
没有构造函数的实例与参数列表匹配
King.h
#pragma once
#include "Queen.h"
class King :
public Queen
{
public:
King(Player& p, const int row, const int col, Board& b);
bool isWayfree(const int destRow, const int destCol) const override;
bool isLeagalMove(const int destRow, const int destCol) const override;
};
最佳答案
Piece* Board::getPieceBySign(char sign, Player& _player1,
Player& _player2, Player& _emptyPlayer, int row, int col) const
尾随的 const
表明这是一个 const
方法。在 const
方法中,this
对象是 const
。这就是 const
方法的含义。
King(Player& p, const int row, const int col, Board& b);
*this
作为最后一个参数传递给此构造函数,但该参数是 Board &
,而不是 const Board &
>。这就是编译错误的原因。您必须将其设为 const Board &b
,或者 getPieceBySign
必须是非 const
类方法。
现在您知道原因了,您可以返回并查看编译器的完整错误消息,包括最初的“没有构造函数实例与参数列表匹配”之后的所有内容;您应该能够看到这正是您的编译器以自己的方式告诉您的内容。
关于C++:构造函数的实例没有与参数列表匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74913839/