doublench21
@doublench21

Почему Xcode считает класс абстрактным?

#include <iostream>
#include "99_Container.h"
#include "99_Mem.h"
#include "Queue.h"

using namespace std;

int main(int argc, const char *argv[]) {
  Mem mem(0);
  Queue l(mem);     // Variable type 'Queue' is an abstract class ?
  l.insert(NULL, NULL, 0);
  cout << "l.empty()=" << l.empty() << endl;

  cout << "Hello, World!\n";
  return 0;
}


#pragma once

#include "Queue.h"

class Queue : public AbstractQueue {
public:
  Queue(MemoryManager &mem) : AbstractQueue(mem) {}

  /**
   *******************  class Queue
   **/

  //Поиск элемента в контейнере. Возвращает true, если контейнер содержит
  //элемент, и false в противном случае.
  bool search(void *elem, size_t size) { return false; }

  /**
   * Queue_End
   **/

  /**
    ******************* class AbstractQueue
   **/

  // Добавление элемента в начало контейнера.
  // В случае успешного добавления функция возвращает значение 0, в случае
  // неудачи 1.
  int push(void *elem, size_t elemSize) { return 0; }

  // Удаление элемента из начала контейнера.
  int pop() { return 0; }

  // Функция явно возвращает указатель на элемент, находящийся в начале
  // контейнера.
  // и не явно возвращает размер данных
  void *front(size_t &size) { return NULL; }

  // Функция явно возвращает указатель на элемент, находящийся в конеце
  // контейнера.
  // и неявно возвращает размер данных
  void *back(size_t &size) { return NULL; };

  // Добавление элемента в позицию,
  // на которую указывает итератор iter.
  // В случае успешного добавления функция возвращает значение 0, в случае
  // неудачи 1.
  int insert(Container::Iterator *iter, void *elem, size_t elemSize) {
    return 0;
  }

  /**
   * AbstractQueue_End
   **/

  /**
   *******************  class Container
   **/

  // Функция возвращает значение, равное количеству элементов в контейнере.
  int size() { return 0; }

  // Функция возвращает значение, равное максимальной вместимости контейнера в
  // байтах.
  // virtual size_t max_bytes() { return 0; }

  //Функция возвращает указатель на итератор, указывающий на первый найденный в
  //контейнере элемент. Если элемент не найден, возвращается пустой указатель.
  Container::Iterator *find(void *elem, size_t size) { return NULL; }

  // Создание итератора, соответствующего данному типу контейнера.
  Container::Iterator *newIterator() { return NULL; }

  // Удаление всех элементов из контейнера.
  void clear() {}

  // Возвращает итератор на первый элемент контейнера.
  Container::Iterator *begin() { return NULL; }

  // Возвращает итератор на элемент, следующий за последним элементом
  // контейнера.
  Container::Iterator *end() { return NULL; }

  // если контейнер пуст возвращает true, иначе false
  bool empty() { return true; }

  // Удаление элемента из позиции, на которую указывает итератор iter.
  void remove(Container::Iterator *iter) {}

  /**
   * Container_End
   **/
};
  • Вопрос задан
  • 207 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Потому что вы какие-то чистые виртуальные функции не реализовали.
Что за AbstractQueue-то?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы