2013-10-07 4 views
3

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

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

Для меня это имеет смысл, даже если это действительно странно. Теперь у меня есть стек и класс 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-файле?

+2

вам следует направить по электронной почте своего инструктора. Инструкторы совершают много ошибок. уточнить с ними. – pippin1289

+2

Это полностью сломано. Просто поставьте включенных охранников в их заголовки, где они принадлежат. – juanchopanza

ответ

2

Защитник должен находиться в файле заголовка.

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

1

Это зло домашнее задание!

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

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

Отнесение просто вводит в заблуждение: C/C++ препроцессор делает обработки текста, только!