类重定义错误C++

Class Redefinition Error C++

本文关键字:C++ 错误 定义      更新时间:2023-10-16

我遇到了类重定义错误的问题。 我得到了一个文件"Arraylist.cpp"和"Arraylist.h"。 奇怪的是,讲师在 Arraylist 中包含 Arraylist.h 标头保护.cpp作为

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

对我来说,这是有道理的,即使它真的很奇怪。 现在我有一个堆栈和一个队列类,它们都继承自 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++ 预处理器只执行文本处理!