ЭТО УПРОЩЕННЫЙ КОД!У меня есть файлы C ++ (где это реализация) и файлы заголовков (где определения классов)!
У меня есть файл: Foo.cpp , который включает main.h.И у меня есть файл Bar.cpp , который использует funcs Foo.cpp , а также включает main.h .Он использует struct для доступа к объекту Foo и вызова его функции.Но структура определена в main.h ?Я пытался решить это так:
**IN MAIN.H**
#pragma once
class Foo;
struct FoobarPackage {
FoobarPackage(Foo *fooObj) {
soso = fooObj;
}
Foo *soso;
};
* * *
**IN FOO.CPP**
#pragma once
#include "main.h"
class Foo {
void doSomething(bool ololo) {
if (ololo) //do something else
}
};
* * *
**IN BAR.CPP**
#pragma once
#include "main.h"
#include "Foo.cpp"
class Bar {
bool killAllHumans(FoobarPackage planet) {
planet.soso->doSomething(true);
return true;
}
};
* * *
Но это вызвало:
Bar.cpp:8: error: invalid use of incomplete type "struct(WTF??!!! — author's comment) Foo"
main.h:3: error: forward declaration of "struct(why struct?) Foo"
Что не так с моим кодом?И это не настоящий код.Я упростил свой реальный проект и вырезал все, что не нужно.Foo.cpp и Bar.cpp, конечно, имеют свои заголовки, в которых определены классы Foo и Bar, а в .cpp файлах это только их реализация.Также killAllHumans()
вызывается из main.cpp, где находится main()
.
* EDITED * Я знаю, что #include
работает с заголовками, но я написал, что это«псевдокод».Я использую файл заголовка и файл cpp в моем проекте readl и включаю только заголовки, а #pragma once
в мои заголовки.В этом вопросе я только упрощаю свой код!Пожалуйста, прочитайте все вопросы, прежде чем ответить!
* EDITED2 * Попытался скомпилировать его сейчас.Оно работает.Странно.
Спасибо.