0

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;
}
Razielruss
  • 139
  • 1
  • 7

0 Answers0