Пишет перегрузка, объявлено где sin_cos(): Function() написано, что не так?

Валерий

#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
class Function
{ protected: ****** x, y; public: Function() { x = 0; y = 0; } Function(Function& p) { x = p.x; y = p.y; } virtual ****** Calculation(int) = 0;
};
class sin_cos : public Function
{ sin_cos(): Function() {} virtual ****** Calculation(int t) { y = sin(t); x = cos(t); return x; }
};
int main()
{ setlocale(LC_ALL, "rus"); Function* mas[5]; mas[1] = new sin_cos; cout << mas[i]->Calculation(10) << endl; system("pause"); return 0;
}
</iomanip></cmath></iostream>
2 ответа

Валерий

Надо бы как комментарий, но там не поместится... Пишет VС++ следующее:

error C2248: sin_cos::sin_cos: невозможно обратиться к private член, объявленному в классе "sin_cos"

error C2065: i: необъявленный идентификатор

error C2227: выражение слева от "->Calculation" должно указывать на тип класса, структуры или объединения либо на универсальный тип

Что именно из этого вам непонятно?

GCC ругается примерно так же:

prog.cpp: In function ‘int main()’:
prog.cpp:40:18: error: ‘sin_cos::sin_cos()’ is private within this context mas[1] = new sin_cos; ^~~~~~~
prog.cpp:26:5: note: declared private here sin_cos(): Function() ^~~~~~~
prog.cpp:41:17: error: ‘i’ was not declared in this scope cout << mas[i]->Calculation(10) << endl;

sin_cos - конструктор в классе не объявлен как public, так что создать объект вот так

mas[1] = new sin_cos;

нельзя - нет прав доступа. А потом нельзя воспользоваться

mas[i]->Calculation(10)

потому что не только значение i неизвестно, но и сама эта переменная не объявлена.


Валерий

Вы забыли указать управление доступом public для конструктора класса sin_cos и виртуальной функции Calculation

class sin_cos : public Function
{ public: ^^^^^^^ sin_cos(): Function() {} virtual ****** Calculation(int t) { y = sin(t); x = cos(t); return x; }
};

Также в main, я думаю, вы имели в виду индекс 1 вместо переменной i, которая не объявлена

mas[1] = new sin_cos; cout << mas[1]->Calculation(10) << endl; ^^^

Имейте в виду, что индексы массивов начинаются с 0, а не с 1.

licensed under cc by-sa 3.0 with attribution.