Ошибки компоновщика - неразрешенный внешний символ - PullRequest
1 голос
/ 17 февраля 2010

Хауди. Я работаю над заданием C ++ для моего класса. Я почти закончил, но не могу понять эти ошибки:

error LNK2001: unresolved external symbol "public: virtual void __thiscall HasQuarterState::dispense(void)const " (?dispense@HasQuarterState@@UBEXXZ) gumball.obj Gumball
error LNK2001: unresolved external symbol "public: virtual void __thiscall SoldState::turnCrank(void)const " (?turnCrank@SoldState@@UBEXXZ) gumball.obj Gumball
fatal error LNK1120: 2 unresolved externals C:\School Work\CS 492\Gumball\Debug\Gumball.exe Gumball

Я пошел в MSDN и посмотрел на ошибку LNK2001, но получил огромное количество информации, и боюсь, что не могу понять, что не так, учитывая мой ограниченный опыт работы с C ++ при просмотре страницы MSDN.

Но я верю, что проблемы возникают из-за того, как я структурировал свою программу. Мой учитель сказал, что мы можем использовать один файл .cpp, если захотим, но я думаю, в конце концов, я недостаточно знал о Visual Studios / C ++, чтобы сделать это. В конечном итоге я столкнулся с некоторыми другими проблемами, которые мне пришлось решить, используя один файл .cpp.

Код / файл находится здесь: http://codepad.org/LpBeJT2Y

Это большой беспорядок, но это то, что я сделал:

  • Объявление класса с именем GumballMachine (без определения)
  • Определить класс с именем State (который в свою очередь имеет указатель на GumballMachine)
  • Определено несколько других классов состояний, которые наследуются от State
  • Определить класс GumballMachine
  • Определено несколько функций, которые были исключены из первоначальных определений других классов состояний. Это потому, что эти функции основаны на определенных функциях GumbballMachine и не будут работать, пока не будут определены функции GumballMachine.
  • void main ()

Насколько я могу судить (с моим ограниченным знанием VS / C ++), код выглядит хорошо. Может быть, кто-то с большим опытом поймает что-то. Любые указатели о том, как решить эту проблему?

Спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 17 февраля 2010

Вы объявили дозирование в HasQuarterState, но не определили его. Функция не имеет тела. Аналогично с TurnCrank в SoldState.

0 голосов
/ 17 февраля 2010

В классе SoldState turnCrank не определен. Изменить это:
void turnCrank () const;
На это:
void turnCrank () const {cout << "некоторая реализация" << endl; } </p>

и аналогично для другой функции.

...