У меня есть что-то вроде этого:
class X
{
method(){...};
void f()=0;
};
class my_X;
class my_Y;
class my_X: public X
{
public:
his_Y* opp;
void f()={...};
};
class his_X: public X
{
public:
my_X* opp;
void f()={...};
};
Теперь, когда я хочу получить прибыль от полиморфизма и использовать мой член opp
, в то время как при вызове X::method()
g ++ говорится, что opp
не было объявлено. Поскольку X
является абстрактным, я думал, что компилятор поймет, что метод может быть вызван только из my_X
или his_X
, в котором объявлено opp
.
Один найденный трюк - добавить член X* opp
моего класса X
, который впоследствии будет скрыт моими определениями подклассов opp
.
Это правильное решение? Если нет, есть ли решение? Или эта проблема связана с плохим дизайном класса?