当前位置: 首页 > 知识库问答 >
问题:

C++错误“未定义对Class::Function()的引用”[重复]

薄伟彦
2023-03-14

我想知道有没有人能帮我解决这个问题--我才刚接触C++,它给我带来了很多麻烦。

我正在尝试制作相对简单的套牌和卡类对象。

错误出现在“deck.cpp”中,它声明了一个卡片数组,然后我尝试用卡片对象填充数组。它说有对卡::卡()卡::卡(卡::rank,卡::suit)卡::~卡()的未定义引用。

#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
#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();

卡d.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;
}

共有1个答案

贝滨海
2023-03-14

你用什么来编译这个?如果存在未定义的引用错误,通常是因为.o文件(从.cpp文件创建)不存在,并且编译器/构建系统无法链接它。

另外,在您的card.cpp中,函数应该是card::card()而不是void card卡::正在确定范围;这意味着您的Card()函数是Card类的成员(显然是的,因为它是该类的构造函数)。没有这个,void Card只是一个免费的功能。同样,

无效卡(Card::rank rank,Card::suit suit)

 类似资料:
  • 问题内容: 另外stoi和exit(0)都在stk.cpp中超出范围,我不知道为什么。 这是main.cpp 使用 as 编译时会导致此错误: 这是stk.h 这是stk.cpp中的startProg函数 格式化失败,我假设所有括号都正确。 问题答案: 问题是您在创建可执行文件时 没有 链接来自stk.cpp的代码。 解决方案1:首先编译.cpp文件,然后链接。 解决方案2:一步编译并链接两个文件

  • 可能重复: 什么是未定义的引用/未解决的外部符号错误,如何修复? 试图通过 我得到一个错误: main.cpp 搞砸h文件: 有什么想法吗?使用此函数构建具有设置大小的哈希表。 编辑:散列。cpp文件 正在尝试通过以下终端进行编译: g-c Hash.cpp-o Hash. o g-omain.cpphash. o-std=c 0x 不知怎的,它进入了一个无限循环。

  • 问题内容: 我在使用C ++(Eclipse)的Linux中工作,并且想要使用一个库。Eclipse显示了一个错误: 你知道解决方案吗? 这是我的代码: 问题答案: 您必须针对libdl进行链接,添加 -ldl 到您的链接器选项

  • 可能重复: 什么是未定义的引用/未解决的外部符号错误以及如何修复它? 尝试通过编译我的程序 我得到了错误: 不知怎么会进入一个无限循环。

  • 问题内容: 我对Ubuntu相当陌生,但似乎无法使它正常工作。它可以在我的学校计算机上正常工作,我不知道自己在做什么。我检查了 usr / include 和time.h就好了。这是代码: 我正在使用CodeBlocks作为我的IDE来进行构建和运行。任何帮助都会很棒,谢谢。 问题答案: 添加到g ++命令行的末尾。该链接在librt.so“实时”共享库中。

  • 这是我的HTML代码,我试图将div中输出的内容转换成可下载的pdf文件。 我在控制台上得到这个错误: “未捕获引用错误:未定义jsPDF” 我不确定我做错了什么,我甚至在脚本标签中添加了。。。