在 C++ 中,我遇到了双重包含的问题:
文件 stuffcollection.h
#pragma once
#ifndef STUFFCOLLECTION_H
#define STUFFCOLLECTION_H
#include "Stage.h"
class Stuffcollection {
public:
bool myfunc( Stage * stage );
};
#endif // STUFFCOLLECTION_H
文件阶段.h:
#pragma once
#ifndef STAGE_H
#define STAGE_H
#include "Stuffcollection.h"
class Stage {
// stuffcollection used in stage.cpp
};
#endif // STAGE_H
编译器错误:
\Stuffcollection.h|(line were bool myfunc is declared)|error: 'Stage' has not been declared|
||=== Build finished: 1 errors, 0 warnings ===|
有人可以解释为什么会发生这种情况以及如何解决吗?我已经使用了包含警卫和 pragma once 预处理器指令,但它不起作用。
(如果我#include "Stuffcollection.h"
从 stage.h 中删除并注释掉在 stage.cpp 中使用它的相应行,我的其余代码工作正常。实际上只是在将 Stuffcollection 包含到阶段时它突然停止工作。)
PS:stage 只是一个例子,我几乎在所有其他文件中都使用了 stuffcollection,每次遇到这个问题。
编辑:我遵循了建议,现在问题是invalid use of incomplete type
,即虽然给出的答案解决了循环依赖的问题,但它们并没有解决我正在处理的问题。我的问题在Circular Dependencies / Incomplete Types中继续存在。
编辑:现在都解决了。