C ++ Fehler 'Undefinierter Verweis auf Class :: Function ()' [duplizieren]

Diese Frage hat hier bereits eine Antwort:

Was ist ein undefinierter Referenz- / ungelöster externer Symbolfehler und wie behebe ich ihn? 32 Antworten

Ich habe mich gefragt, ob mir jemand dabei helfen könnte - ich bin erst neu in C ++ und es verursacht mir eine ganze Menge Probleme.

Ich versuche, relativ einfache Deck- und Kartenklassenobjekte zu erstellen.

Der Fehler erscheint in "Deck.cpp", Deklaration eines Arrays von Karten, und dann, wenn ich versuche, das Array mit Kartenobjekten zu füllen. Es heißt, es gibt einen undefinierten Verweis aufCard::Card(), Card::Card(Card::Rank, Card::Suit) undCard::~Card().

Ich habe anscheinend alle meine Einschlüsse in Ordnung, also weiß ich nicht, was falsch läuft.

Der Code lautet wie folgt:

deck.h

#ifndef DECK_H
#define DECK_H
#include "card.h"

class Deck
{
 public:
    Deck();
    ~Deck();
    Card DealNextCard();
    void Shuffle();
    void DisplayDeck();
protected:
private:

};

#endif // DECK_H

deck.cpp

#include "Deck.h"
#include "card.h"

using namespace std;

const int NUM_TOTAL_CARDS = 52;
const int NUM_SUITS = 4;
const int NUM_RANKS = 13;
Card* cardArray;
void Deck() {
    cardArray = new Card[NUM_TOTAL_CARDS];
    int cardCount = 0;
    for (int i = 0; i > NUM_SUITS; i++) {
        for (int j = 0; j > NUM_RANKS; j++) {
            cardArray[cardCount] = Card(Card::Rank(i), Card::Suit(j) );
            cardCount++;
        }
    }
}


Card DealNextCard();
void Shuffle();
void DisplayDeck();

card.h

class Card
{

    public:
        enum Suit {D=0, H, C, S};
        enum Rank {ONE=0, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, J, Q, K, A};
        Card(Card::Rank, Card::Suit);
        Card();
        virtual ~Card();
        Card::Suit suit;
        Card::Rank rank;
        Card::Rank GetRank();
        Card::Suit GetSuit();
        std::string CardName();

    protected:

    private:

};

#endif // CARD_H

card.cpp

#include "card.h"
using namespace std;


Card::Suit cardSuit;
Card::Rank cardRank;

void Card() {
    //nothing
     }


void Card(Card::Rank rank, Card::Suit suit) {
cardRank = rank;
cardSuit = suit;
}

Card::Rank GetRank() {
return cardRank;
}
Card::Suit GetSuit() {
return cardSuit;
}
std::string CardName() {
    string test;
    test = "testing string";
    return test;
}

Antworten auf die Frage(4)

Ihre Antwort auf die Frage