Неразрешенные внешние [Конструкторы]
Возможный дубликат:
Что такое неопределенная ссылка / неразрешенная внешняя ошибка символа и как ее исправить?
У меня есть проблема с компоновщиком, которую я просто не могу решить. Уже пробовал все, что мог придумать, у меня есть 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.