首页 > 解决方案 > 编译器通过将数组传输到函数给我一个错误

问题描述

我自己学习 c++ 并阅读此链接上的教程:https ://www.learncpp.com 在我的练习中,我必须从数组库中编写一个数组并用卡片填充它。在我填满它之后,我必须显示所有带有 std::cout 的卡片。

但是,当我将数组传输到 main.cpp 中的函数 printCard 时,我得到了一个我无法解决的错误。

在下面你可以看到我的整个程序。谢谢您的帮助

甲板.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);

甲板.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]);
    }
}

主文件

#include<iostream>
#include "Deck.h"
#include <array>

int main() {

    std::array<Card, 52> deck{ createDeck() };

    printDeck(deck);

    return 0;
}

标签: c++arraysfunction

解决方案


推荐阅读