我想知道是否有人可以幫我解決這個問題 - 我只是C++的新手,它給我帶來了相當多的麻煩。C++錯誤'未定義的引用Class :: Function()'
我試圖做出相對簡單的甲板和卡類對象。
錯誤顯示在「Deck.cpp」中,聲明一個卡片數組,然後當我嘗試用卡片對象填充數組時。它說有一個未定義的參考Card::Card()
,Card::Card(Card::Rank, Card::Suit)
和Card::~Card()
。
我已經把我的所有包括看起來都是正確的,所以我不知道發生了什麼問題。
的代碼如下:
加入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;
}
在CPP文件中,所有的函數定義都必須像這樣嗎? 例如 Card :: Rank Card :: GetRank(){ return cardRank; } Card ::西服卡:: GetSuit(){ return cardSuit; } –
@BenHarris:是的,那是你如何定義成員函數 –