Я знаю, что мы не можем определить функции, принимающие неполный тип в качестве параметра, поэтому ожидается, что ниже код не скомпилируется с ошибкой C2027: использование undefined типа 'Derived'
class Derived;
class Base{
public:
void test(Derived d){ cout<<"test"<<endl; }
};
class Derived : public Base{
int j;
};
По той же логике я ожидаю, что компиляция завершится неудачей, когда test() примет объект Base, который имеет неполный тип до этой точки. Однако это не так, и следующий код компилирует fine
class Derived;
class Base{
public:
void test(Base b){ cout<<"test"<<endl; }
};
class Derived : public Base{
int j;
};
Есть ли разница между неполным типом класса, который мы имеем во время определения класса, и неполным типом, открытым с помощью прямого объявления?