3

我遇到了类重新定义错误的问题。我得到了一个文件“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 文件中包含标题保护吗?

4

2 回答 2

2

守卫应该在头文件中。

解决方法(假设您无法编辑原始头文件):创建另一个带有保护的头文件并从那里包含头文件。

于 2013-10-07T20:13:30.470 回答
1

那是邪恶的功课!

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

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

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

于 2013-10-07T20:38:02.920 回答