Страницы

Поиск по вопросам

четверг, 9 января 2020 г.

Использование неопределенного типа

#cpp #классы


Пишу абстрактный класс символьного дифференцирования и возникла проблема с объявлением
классов sin и cos, если сначала объявляю cos, то не могу использовать sin в методе
diff, если сначала объявляю sin, то не могу использовать cos. Ошибка: использование
неопределенного типа "Sin"
Как решить эту проблему?

class Cos : public Expression
{
private:
    Expression *d1;
public:
    friend class Sin;
    Cos(Expression *L1) : d1(L1) {}
    Expression *diff()
    {
        return new Mul(new Sin(d1), d1->diff());
    }
    void print(){}
};
class Sin : public Expression
{
private:
    Expression *d1;
public:
    friend class Cos;
    Sin(Expression *L1): d1(L1) {}
    Expression *diff()
    {
        return new Mul(new Cos(d1), d1->diff());
    }
    void print(){}
};

    


Ответы

Ответ 1



В определении функций diff требуется завершенный класс, раз уж вы используете его конструктор. Так что вы должны в объявлениях классов только объявить функции-члены diff, а вот определять их (писать тело) - вне классов. Типа class Cos : public Expression { private: Expression *d1; public: friend class Sin; Cos(Expression *L1) : d1(L1) {} Expression *diff(); void print(){} }; Потом - такой же Sin, а уж только потом, вне классов, писать Expression *Cos::diff() { return new Mul(new Sin(d1), d1->diff()); }

Комментариев нет:

Отправить комментарий