我遇到类重定义错误的问题。我收到了一个文件“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文件中包括标题保护吗?
答案 0 :(得分:2)
警卫应该在头文件中。
解决方法(假设您无法编辑原始标头):使用警卫创建另一个头文件,并从那里包含头文件。
答案 1 :(得分:1)
这是邪恶的功课!
在包括Arraylist.h的任何文件中:
#ifndef ARRLIST
#define ARRLIST
#include "Arraylist.h"
#endif
赋值只是误导:C / C ++预处理器只进行文本处理!