不完全な型をパラメーターとして取る関数を定義できないことはわかっているため、以下のコードはエラー C2027: use of undefined type 'Derived' でコンパイルに失敗することが予想されます。
class Derived;
class Base{
public:
void test(Derived d){ cout<<"test"<<endl; }
};
class Derived : public Base{
int j;
};
同じ論理で、test() がその時点まで不完全な型である Base のオブジェクトを受け取ると、コンパイルが失敗することが予想されます。ただし、そうではなく、次のコードは正常にコンパイルされます
class Derived;
class Base{
public:
void test(Base b){ cout<<"test"<<endl; }
};
class Derived : public Base{
int j;
};
クラスが定義されている間に私たちが持っている不完全なクラス型と前方宣言によって公開された不完全な型の間に違いはありますか?