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