Нет синтаксиса для прямого объявления двух классов и указания того, что один наследуется от другого. Это связано с тем, что наследование может быть сложным (множественным и / или виртуальным), поэтому присваивание base1 = derived1
может включать некоторую арифметику, и компилятору трудно / невозможно сгенерировать эту арифметику, когда он знает только, что derived
наследуется от base
.
Итак, чтобы решить вашу проблему, вы можете сделать func
не встроенным (см. Ответ от AbstractDissonance ), или, если вам абсолютно необходимо, чтобы оно было встроенным, используйте reinterpret_cast
:
class base;
class derived;
class other
{
public:
void func() {base1 = reinterpret_cast<base*>(derived1);}
base* base1;
derived* derived1;
};
Это плохо, поскольку не гарантируется, что он будет работать по стандарту C ++, и почти наверняка не будет работать, если вы используете множественное / виртуальное наследование. Используйте это только в том случае, если func
должен быть максимально быстрым (т.е. inline ), и если вам не нужен ваш код для переносимости.