Неразрешенные внешние [Конструкторы]

Возможный дубликат:
Что такое неопределенная ссылка / неразрешенная внешняя ошибка символа и как ее исправить?

У меня есть проблема с компоновщиком, которую я просто не могу решить. Уже пробовал все, что мог придумать, у меня есть Baseclass (Person) и Derived Class (Dealer), и я просто хочу вызвать конструктор из класса CardStack, который является членом класса Dealer.

Вот мой код:

Person.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

Dealer.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

Dealer.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: неразрешенный внешний символ "public: virtual __thiscall Person::~Person(void)" (??1Person@@UAE@XZ), на который ссылается функция __unwindfunclet $?? 0Dealer @@ QAE @ H @ Z $ 0

1> Dealer.obj: ошибка LNK2001: неразрешенный внешний символ "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)

1 ответ

Похоже, вы пытаетесь скомпилировать 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.
Другие вопросы по тегам