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

310
14 октября 2017, 19:50

Пишу абстрактный класс символьного дифференцирования и возникла проблема с объявлением классов 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(){}
};
Answer 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());
}
READ ALSO
ofstream, ifstream c++

ofstream, ifstream c++

Есть один файл ofstream fout("fouttxt"); передаю его в 2 функции, в первой функции в него нужно сделать запись, а во второй функции нужно считать его, т

293
Помогите Написать код попадания точки в фигуру [требует правки]

Помогите Написать код попадания точки в фигуру [требует правки]

Ребята, учусь на первом курсе и не могу понять как написать код на C++ Как определить попадание точки в фигуру на координатной плоскости Я не понимаю...

310
Чем заменить функцию stoi?

Чем заменить функцию stoi?

В программе нужно перевести строку в целое числоЯ пытался использовать функцию stoi для этой цели, но она не принимается - выходит ошибка:

327
считать файл с определенного места си

считать файл с определенного места си

можно ли начать читать файл с определенного места?например есть текст,обработал одно слово -закрыл файл,в другой функции открыл этот файл...

219