Переопределение стека ошибок переопределения классов

У меня проблема с ошибкой переопределения класса. Мне дали файл «Arraylist.cpp» и «Arraylist.h». Как ни странно, инструктор включил охрану заголовка Arraylist.h в Arraylist.cpp как

#ifndef ARRLIST
#define ARRLIST
#include "Arraylist.h"#endif

Для меня это имеет смысл, хотя это действительно странно. Теперь у меня есть классы Stack и Queue, которые оба наследуются от Arraylist, и у меня есть файлы .cpp и .h с соответствующими заголовками, перечисленными ниже.

#ifndef QUEUEARRLIST
#define QUEUEARRLIST
#include "Arraylist.h"//Code
#endif

#ifndef STACKARRLIST
#define STACKARRLIST
#include "Arraylist.h"//Code
#endif

В другой класс я включаю и Stack.h и Queue.h. Во время компиляции я получаю «Ошибка переопределения класса» на Arraylist.cpp. Теперь, если перенести охрану заголовков из Arraylist.cpp в Arraylist.h, как это сделал бы любой нормальный человек, я не получу ошибок, и все будет нормально. Проблема в том, что с заданием нам вообще не разрешено изменять код инструктора, поэтому есть ли способ обойти это, или я должен сказать профессору, что он должен пересмотреть вопрос о включении охранников заголовков в свой файл .cpp?

3

Решение

Страж должен быть в заголовочном файле.

Обходной путь (при условии, что вы не можете редактировать исходный заголовок): Создайте другой файл заголовка с защитой и включите в него файл заголовка.

2

Другие решения

Это злая домашняя работа!

В любом файле, включая Arraylist.h:

#ifndef ARRLIST
#define ARRLIST
#include "Arraylist.h"#endif

Назначение просто вводит в заблуждение: препроцессор C / C ++ выполняет только текстовую обработку!

1

По вопросам рекламы [email protected]