类重新定义错误C ++

时间:2013-10-07 19:58:15

标签: c++ class redefinition

我遇到类重定义错误的问题。我收到了一个文件“Arraylist.cpp”和“Arraylist.h”。奇怪的是,教练在Arraylist.cpp中包含了Arraylist.h标头守卫

#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文件中包括标题保护吗?

2 个答案:

答案 0 :(得分:2)

警卫应该在头文件中。

解决方法(假设您无法编辑原始标头):使用警卫创建另一个头文件,并从那里包含头文件。

答案 1 :(得分:1)

这是邪恶的功课!

在包括Arraylist.h的任何文件中:

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

赋值只是误导:C / C ++预处理器只进行文本处理!