C++中的构造函数调用11没有匹配函数

C++中的构造函数调用11没有匹配函数,c++,arrays,oop,c++11,constructor,C++,Arrays,Oop,C++11,Constructor,我试图创建两个类:一个用于卡,它包含两个等级和套装字符串,另一个用于手,它包含大小为5的卡对象数组 #include <iostream> #include <array> #include <string> using namespace std; class Card { public: explicit Card(string rank, string suit){ this->rank = rank;

我试图创建两个类:一个用于卡,它包含两个等级和套装字符串,另一个用于手,它包含大小为5的卡对象数组

#include <iostream>
#include <array>
#include <string>

using namespace std;

class Card
{

    public:
    explicit Card(string rank, string suit){
        this->rank = rank;
        this->suit = suit;
    }

    string getRank(){
        return rank;
    }

    string getSuit(){
        return suit;
    }

    protected:
    string rank;
    string suit;

}; 

class Hand
{
    public:
    explicit Hand(Card cards[5]){
        this->cards[5] = cards[5];
    }

    protected:
    Card cards[5];
    bool isFlush;
    bool isStraight;
    bool isRoyal;
    bool isPair;
    bool istwoPair;
    bool isTOAK;
    bool isFOAK;
};
为什么构造函数会出错?我理解调用Card::Card时没有匹配函数的消息,但我不打算空白地实例化它。我将创建五张卡片,然后将五张卡片分配给一个类。比如:

int main(){
    Card card1("3", "Spade");
    Card card2("3", "Spade");
    Card card3("A", "Diamond");
    Card card4("K", "Heart");    
    Card card5("1", "Spade");

    Card hand1cards[5] {card1, card2, card3, card4, card5};

    Hand myHand(hand1cards);    

}
所以我不打算做构造函数重载,为什么会出现这个错误呢?我可以做些什么来修复我的构造函数,从而允许我传入一个固定大小的卡片对象数组来创建一个手对象

我已经研究了其他几个有类似问题的问题,即:

然而,它们似乎都没有处理我将另一个类的数组传递给这个类的问题

C++包含了您包含但未使用的内容。 您可以将构造函数更改为:

explicit Hand(array<Card, 5> cards) : cards(cards){}
它正在访问卡的第六个元素,该元素不在那里,并导致出现一个错误。

C++包含但未使用的元素。 您可以将构造函数更改为:

explicit Hand(array<Card, 5> cards) : cards(cards){}

它正在访问卡的第6个元素,该元素不存在,并导致。

可能的重复。请注意,卡[5]与卡*卡相同。您可能应该改为使用std::array,它可以按照您的意愿工作。。。写入不存在的数组元素。卡片的有效索引是0到4。我知道索引0->4,因为数组是基于0的,不像MATLAB,但我想说的是大小5。也请注意,卡片[5]与卡片*卡片相同。您可能应该改为使用std::array,它可以按照您的意愿工作。。。写入不存在的数组元素。卡片的有效索引是0到4。我知道索引0->4,因为数组是基于0的,不像MATLAB,但我想说的是大小5。这就是我的意图。我忘记了C++和古数组之间的差异:array@JerryM. 我以为你也把它和C数组弄错了。这就是我的意图。我忘记了C++和古数组之间的差异:array@JerryM. 我以为你也把它和C数组弄错了。
this->cards[5] = cards[5];