1

可能重复:
什么是未定义的引用/未解决的外部符号错误,我该如何解决?

我有一个我无法解决的链接器问题.. 已经尝试了我能想到的任何事情我有一个基类(人)和一个派生类(经销商),我只想从 CardStack 类中调用构造函数是 Dealer 类的成员。

这是我的代码:

人.h

#ifndef PERSON_H
#define PERSON_H
#include "Card.h"
#include "Hand.h"

class Person
{
public:
    Person(void);
    virtual ~Person(void);
    virtual bool TakeCard(Card c);
    virtual bool Lost(void);

protected:
    virtual void CheckLost(void);
    bool b_Lost;
    Hand m_Hand;
};
#endif

经销商.h

    #ifndef DEALER_H
#define DEALER_H

#include "Person.h"
#include "Card.h"
#include "CardStack.h"

class Dealer : public Person
{
public:
    Dealer(int stackcount);
    virtual ~Dealer(void);
    bool TakeCard(Card c);
    bool Lost(void);
    Card GiveCard(Card c);

protected:
    void CheckLost(void);
    CardStack m_GameStack;
};
#endif

经销商.cpp

#include "Dealer.h"

Dealer::Dealer(int stackcount) : Person(), m_GameStack(stackcount)
{

};

Dealer::~Dealer(void)
{

};

bool Dealer::TakeCard(Card c)
{
    if(!b_Lost || m_Hand.GetTotal() <= 17)
    {
        m_Hand.Take(c);
        CheckLost();
        return true;
    }

    return false;
};

void Dealer::CheckLost()
{
    if (m_Hand.GetTotal() > 21)
    {
        b_Lost = true;
    }
};

bool Dealer::Lost()
{
    return b_Lost;
};

老实说,我尝试了我能想到的一切,但我无法弄清楚错误是什么......

这是编译 Dealer.cpp 时的输出:

1>Dealer.obj : 错误 LNK2019: 函数 __unwindfunclet$??0Dealer@@QAE@H@ 中引用的未解析外部符号“public: virtual __thiscall Person::~Person(void)”(??1Person@@UAE@XZ) Z$0

1>Dealer.obj : error LNK2001: unresolved external symbol "public: virtual bool __thiscall Person::TakeCard(class Card)" (?TakeCard@Person@@UAE_NVCard@@@Z)

1>Dealer.obj : 错误 LNK2001: 无法解析的外部符号 "public: virtual bool __thiscall Person::Lost(void)" (?Lost@Person@@UAE_NXZ)

1>Dealer.obj:错误 LNK2001:未解析的外部符号“受保护:虚拟 void __thiscall Person::CheckLost(void)”(?CheckLost@Person@@MAEXXZ)

4

1 回答 1

-2

看起来您正在尝试将 Dealer.cpp 编译为自己的程序。这不起作用,因为它取决于 Person 中方法的定义,这些方法可能在 Person.cpp 中。如果您向我们展示了您用于编译的命令,那将会很有帮助。但是假设您使用的是 g++,您可能尝试做的是

g++ Dealer.cpp

你应该做的是

g++ Person.cpp Dealer.cpp etc.

或者

g++ -c Dealer.cpp
g++ -c Person.cpp

等等,然后

g++ Dealer.o Person.o etc.
于 2012-10-29T16:09:44.433 回答