I learn c++ by myself and read the tutorial on this link: https://www.learncpp.com In my Exercise I have to program an array from array library and fill it with cards. After i filled it I have to show all cards with std::cout.
But when I transfer my array to the function printCard in my main.cpp , I get an error that i can not solve.
In the following you can see my whole program. Thank you for your help
Deck.h
#include<array>
enum CardRank {
RANK_2,
RANK_3,
RANK_4,
RANK_5,
RANK_6,
RANK_7,
RANK_8,
RANK_9,
RANK_10,
RANK_JACK,
RANK_QUEEN,
RANK_KING,
RANK_ACE,
MAX_RANK
};
enum CardSuit {
SUIT_HEART,
SUIT_CLUBS,
SUIT_SPARE,
SUIT_DIAMONDS,
MAX_SUIT
};
struct Card {
CardRank rank;
CardSuit suit;
};
void printCard(Card card);
std::array<Card, 52> createDeck();
void printDeck(std::array<Card, 52>* deck);
Deck.cpp
#include "Deck.h"
void printCard(Card& card) {
switch (card.rank) {
case CardRank::RANK_2:
std::cout << "2";
break;
case CardRank::RANK_3:
std::cout << "3";
break;
case CardRank::RANK_4:
std::cout << "4";
break;
case CardRank::RANK_5:
std::cout << "5";
break;
case CardRank::RANK_6:
std::cout << "6";
break;
case CardRank::RANK_7:
std::cout << "7";
break;
case CardRank::RANK_8:
std::cout << "8";
break;
case CardRank::RANK_9:
std::cout << "9";
break;
case CardRank::RANK_10:
std::cout << "10";
break;
case CardRank::RANK_JACK:
std::cout << "J";
break;
case CardRank::RANK_QUEEN:
std::cout << "Q";
break;
case CardRank::RANK_KING:
std::cout << "K";
break;
case CardRank::RANK_ACE:
std::cout << "A";
break;
default:
std::cout << "?";
break;
}
switch (card.suit) {
case CardSuit::SUIT_HEART:
std::cout << "H ";
break;
case CardSuit::SUIT_SPARE:
std::cout << "S ";
break;
case CardSuit::SUIT_CLUBS:
std::cout << "C ";
break;
case CardSuit::SUIT_DIAMONDS:
std::cout << "D ";
break;
default:
std::cout << "?";
break;
}
}
std::array<Card, 52>createDeck() {
std::array<Card, 52> deck;
std::size_t card{ 0 };//muss alle karten durchlaufen
//Scheleifen die die karten werte geben
for (std::size_t suit{ 0 }; suit < CardSuit::MAX_SUIT; suit++) {
for (std::size_t rank{ 0 }; rank < CardRank::MAX_RANK; rank++) {
//Wegen sizeType muss hier gecastet werden
//sonst Fehler: 2 unterschiedliche typen
deck[card].rank = static_cast<CardRank>(rank);
deck[card].suit = static_cast<CardSuit>(suit);
card++;
}
}
return deck;
}
void printDeck(const std::array<Card, 52>& deck) {
for (std::size_t card{ 0 }; card < 52; card++) {
printCard(deck[card]);
}
}
Main.cpp
#include<iostream>
#include "Deck.h"
#include <array>
int main() {
std::array<Card, 52> deck{ createDeck() };
printDeck(deck);
return 0;
}