メイン.cpp
#include "Test1.h"
#include "Test2.h"
int main(){
Test1 t1;
Test2 t2;
t1.process(t2);
t2.process(t1);
}
Test1.h
#ifndef TEST1
#define TEST1
#include "Test2.h"
class Test1 {
public:
void process(const Test2& t) {};
};
#endif // !TEST1
Test2.h
#ifndef TEST2
#define TEST2
#include "Test1.h"
class Test2 {
public:
void process(const Test1& t) {};
};
#endif // !TEST2
VS2012 言います:
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2143: syntax error : missing ',' before '&'
error C2664: 'Test2::process' : cannot convert parameter 1 from 'Test1' to 'const int'
私はそれが再び循環インクルードの問題であることを確信しています(私は時々遭遇します)が、今回はなぜこれがコンパイルされないのか分かりません.
注意: クラスは、既知のサイズの互いの参照のみに依存します。インクルード ガード ( #ifndef
) が原因で、Test ヘッダーの 1 つが他のヘッダーを空のファイルとしてインクルードするのですか?