Я пытаюсь создать два класса: один для карты, которая содержит две строки ранга и масти, а другой класс для руки, который содержит массив объектов размера 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;
};
При попытке компиляции я получаю:
wip.cpp:33:35: error: no matching function for call to 'Card::Card()'
33 | explicit Hand(Card myCards[5]){
| ^
Почему конструктор получает ошибку?Я понимаю сообщение No matching function for call to 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);
}
Так что я не планирую перегружать конструктор, так почему я получаю эту ошибку?Что я могу сделать, чтобы исправить мой конструктор, чтобы он позволил мне передать массив объектов Card фиксированного размера для создания объекта Hand?
Я рассмотрел еще несколько вопросов с похожими проблемами, а именно:
Как использовать конструктор не по умолчанию для члена?
ошибка: не найдена соответствующая функция для вызова
"ошибка: нет соответствующей функции для вызова"
И все же ни один из них, похоже, не имеет отношения к моей проблеме (передача массива другого класса этому классу).