それは単純化されたコードです!私はC++ファイル(実装の場合)とヘッダーファイル(クラス定義の場合)を持っています!
main.hを含むFoo.cppというファイルがあります。そして、funcs Foo.cppを使用し、 main.hも含むファイルBar.cppがあります。構造体を使用して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()
ます。
*編集済み*ヘッダーで機能する
ことは知ってい#include
ますが、「擬似コード」と書きました。readlプロジェクトでヘッダーファイルとcppファイルを使用し、ヘッダーのみをインクルード#pragma once
してヘッダーに含めています。この質問では、コードを単純化するだけです。答える前にすべての質問を読んでください!
* EDITED2 * 今すぐコンパイルしようとしました。できます。変。
ありがとう。