C++:构造函数的实例没有与参数列表匹配

标签 c++ constructor

我想从函数返回一个PiecePiece 是我所有作品的抽象类父级。

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/

相关文章:

C++ 覆盖 std::string 的赋值 ( = ) 运算符

c++ - 网络爬虫链接提取问题

c++ - 将构造函数指定为 noexcept 是否会隐式导致在 C++ 中使用 new 运算符的 nothrow 版本?

c++ - 这个析构函数声明是 C++ Primer (Stanley Lippman) 中的拼写错误吗?

c++ - C++ 中全局和类中静态常量和常量变量的行为

c++ - C/C++ : What does this syntax mean?

c++ - 从另一个 vector 分配一个 vector

java - 抽象多态性和继承的类分配错误

C++ - 使用与包装数据相同的语法构造包装类

c++ - 类中 c++ 析构函数的 xCode 问题