2013-10-07 2 views
3

클래스 재정의 오류에 문제가 있습니다. 나는 "Arraylist.cpp"와 "Arraylist.h"라는 파일을 받았다. 이상하게도, 강사는클래스 재정의 오류 C++

이 그것이 정말 이상한 경우에도 의미가 나에게
#ifndef ARRLIST 
#define ARRLIST 
#include "Arraylist.h" 
#endif 

로 Arraylist.cpp에서 Arraylist.h 헤더 가드를 포함. 지금은 내가 Stack.h과 Queue.h 모두 포함, 스택 모두가 다른 클래스에서

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

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

아래에 나열된 적절한 헤더 가드의 ArrayList에서 상속 .CPP 및 .H 파일이 대기열 클래스가 있습니다. 컴파일 시간에 Arraylist.cpp에 "Class redefinition error"가 발생합니다. 이제 정상적인 사람처럼 Arraylist.cpp에서 Arraylist.h로 헤더 가드를 옮기면 오류가 발생하지 않고 모든 것이 잘 실행됩니다. 문제는 우리가 강사 코드를 전혀 수정할 수없는 과제에 있습니다. 따라서이 문제를 해결할 수있는 방법이 없습니까, 아니면 .cpp 파일의 헤더 가드를 포함하여 재검토해야한다고 교수에게 알려야합니까?

+2

강사에게 이메일을 보내야합니다. 강사는 많은 실수를합니다. 그 (것)들과 명확히하십시오. – pippin1289

+2

그건 완전히 망가졌습니다. 그들이 속한 머리말에 포함 경비원을두기 만하면됩니다. – juanchopanza

답변

2

가드는 헤더 파일에 있어야합니다.

해결 방법 (원본 헤더를 편집 할 수 없다고 가정) : 가드가있는 다른 헤더 파일을 만들고 거기에서 헤더 파일을 포함시킵니다.

1

그건 사악한 숙제입니다! Arraylist.h을 포함한 모든 파일에서

:

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

할당은 오해의 소지가 다음 C/C++ 전처리 않는 텍스트 처리 만!