-4

у меня есть код на с++, нужно найти в чем заключается ошибка, описать ее, и по возможности исправить:)

#include<iostream>
#include<queue>

using namespace std;

class stack
{
  public:
  stack(int size);
  void push(int d );
  int pop();
   };

  int main()
  {
   setlocale(LC_ALL,"RUSSIAN");

   stack a(10);

   a.push(1);
   a.push(2);
   a.push(3);
   a.push(4);
   a.push(5);

   cout << a.pop() << ' ';
   cout << a.pop() << ' ';
   cout << a.pop() << ' ';
   cout << a.pop() << endl;
   }

введите сюда описание изображения

Harry
  • 221,325

2 Answers2

5

У вас есть создаваемый вами класс stack, с которым вы работаете. Вы указали компилятору, что у него есть конструктор и функции-члены pop и push. Компилятор принял это к сведению.

Вы использовали все три в программе. Компилятор не возражал - вы же объявили, что они есть (будут), он скомпилировал, написав в объектных файлах что-то вроде (в переводе на человеческий язык) - "компоновщик, тут вызов функции stack::pop, возьми его сам знаешь откуда, и подставь".

Компоновщик рад стараться. Он ищет эти функции везде - в каждом файле, который ему передан для компоновки (но вы передали только один, с приведенным текстом), в библиотеках - но ничего не находит. Потому что вы не озаботились написать определения (реализации) этих функций. И никто не знает, что вы хотели в них написать - может, функция pop должна выводить на экран мультик... А делать что-либо без команды ни компилятор, ни компоновщик не приучены.

Ну, и жалуется компоновщик на отсутствие ваших функций, как умеет - что (в переводе) встретил неразрешенный символ, на который есть ссылка в функции main...

Harry
  • 221,325
  • Спасибо, про реализацию функций совсем забыл, благодарю еще раз) – Руслан Jul 10 '18 at 05:14
1

У вас либо отсутствует реализация класса stack, либо вы хотели подключить std::stack, но забыли включить заголовочный файл

#include <stack>

Я склоняюсь к первому.