У меня проблема с ошибкой переопределения класса. Мне дали файл «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?
Страж должен быть в заголовочном файле.
Обходной путь (при условии, что вы не можете редактировать исходный заголовок): Создайте другой файл заголовка с защитой и включите в него файл заголовка.
Это злая домашняя работа!
В любом файле, включая Arraylist.h:
#ifndef ARRLIST
#define ARRLIST
#include "Arraylist.h"#endif
Назначение просто вводит в заблуждение: препроцессор C / C ++ выполняет только текстовую обработку!