Ich fragte mich, ob mir jemand dabei helfen könnte - ich bin erst neu in C++ und es verursacht mir eine ganze Menge Probleme.C++ - Fehler 'Undefinierter Verweis auf Class :: Function()'
Ich versuche, relativ einfache Deck und Card Klassenobjekte zu machen.
Der Fehler wird in "Deck.cpp" angezeigt, Deklaration eines Arrays von Karten, und wenn ich dann versuche, das Array mit Kartenobjekten zu füllen. Dort steht ein undefinierter Verweis auf Card::Card()
, Card::Card(Card::Rank, Card::Suit)
und Card::~Card()
.
Ich habe alle meine Includes scheinbar richtig, also weiß ich nicht, was schief 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;
}
Müssen alle Funktionsdefinitionen in der CPP-Datei so aussehen? z.B. Karte :: Rangkarte :: GetRank() { return cardRank; } Karte :: Anzugkarte :: GetSuit() { return cardSuit; } –
@BenHarris: Ja, so definieren Sie Member-Funktionen –