В C ++ у меня проблема с двойным включением:
Файл stuffcollection.h
#pragma once
#ifndef STUFFCOLLECTION_H
#define STUFFCOLLECTION_H
#include "Stage.h"
class Stuffcollection {
public:
bool myfunc( Stage * stage );
};
#endif // STUFFCOLLECTION_H
Файл stage.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 ===|
Может кто-нибудь объяснить, почему это происходит и как это можно решить? Я уже использую include guards и директиву препроцессора pragma, и она просто не работает.
(Если я удаляю #include "Stuffcollection.h"
из stage.h и закомментирую соответствующие строки, которые используют его в stage.cpp, остальная часть моего кода работает нормально. Действительно, только при включении Stuffcollection в stage он внезапно перестает работать .)
PS: stage - это всего лишь один пример, я тоже использую подборку вещей почти во всех других файлах, и каждый раз у меня возникает эта проблема.
РЕДАКТИРОВАТЬ : Я следовал предложенному, и теперь проблема в invalid use of incomplete type
, т. Е. В то время как данные ответы решают проблему круговой зависимости, они не решают проблему, с которой я имею дело. Моя проблема продолжается в Круговые зависимости / Неполные типы .
РЕДАКТИРОВАТЬ : Теперь оба решены.