Я пытаюсь отправить производный указатель на функцию базового класса через другую функцию базового класса, но по какой-то причине он жалуется: ошибка: недопустимое использование неполного типа 'struct Derived 'в строке 8.C++ отправка производного указателя в качестве аргумента
#include <iostream>
using namespace std;
class Derived;
class Base
{
public:
void getsomething(Derived *derived){derived->saysomething();} //This is line 8
void recieveit(Derived *derived){getsomething(&*derived);}
};
class Derived : public Base
{
public:
void giveself(){recieveit(this);};
void saysomething(){cout << "something" << endl;}
};
int main()
{
Base *b = new Base;
Derived *d = new Derived;
d->giveself();
return 0;
}
Знаете ли вы, как я мог это исправить?
Почему базовый класс знает о производных классах? – soon
@soon прав; это может быть сделано для работы, но, как правило, плохая идея дизайна состоит в том, чтобы базовые классы знали о производных классах. Возможно, лучший способ реализовать это - сделать 'getsomething()' виртуальной функцией. – Omaha
Кроме того, функция 'receiveit' кажется совершенно бесполезной, поскольку она просто вызывает' getsomething' с обфускационным параметром 'output'. – dornhege