Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Спайдермэн
0 / 0 / 0
Регистрация: 04.05.2014
Сообщений: 125
#1

Шаблонный класс, не работает с френд функцией - C++

03.06.2014, 22:26. Просмотров 171. Ответов 4
Метки нет (Все метки)

Переделал программу под шаблонный класс, все методы работают справно когда задаешь тип. Да вот только проблема с френд функцией. Светит ошибку на выделение динамической памяти в мейне Sample*aa=new int [n];
Вот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#include <iostream>
#include <math.h>
using namespace std;
 
template <class Data> class Sample //ГёГ*áëîГ*Г*ûé ГЄГ«Г*Г±Г± âûáîðêГ*
{
    int n;
    Data a[50];
public:
    Sample();
    Sample(int n, int a[50]);
    void scan();
    void print();
    Data sred();
    Data disp();
    Data rasm();
    Data otkl();
    friend double kohren(Sample *aa, int n);
};
 
template <class Data>
Sample<Data>::Sample()
{
    n=0;
    for(int i=0;i<50;i++)
        a[i]=0;
}
 
template <class Data>
Sample<Data>::Sample(int n, int a[50])
{
    this->n=n;
    for(int i=0;i<50;i++)
        this->a[i]=a[i];
}
 
template <class Data> 
void Sample<Data>::scan()
{
    cout<<"print count elements: ";
    cin>>n;
    cout<<"print "<<n<<" elementts: ";
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
}
 
template <class Data>
void Sample<Data>::print()
{
    cout<<n<<" elements: ";
    for(int i=0;i<n;i++)
        cout<<a[i]<<" ";
    cout<<endl;
}
 
template <class Data>
Data Sample<Data>::sred()
{
    Data c=0;
    for(int i=0;i<n;i++)
    {
        c+=a[i];
    }
    return c/n;
}
 
template <class Data>
Data Sample<Data>::disp()
{
    Data s=0;
    for(int i=0;i<n;i++)
    {
        s+=(a[i]-sred())*(a[i]-sred());
    }
    return s/(n-1);
}
 
 template <class Data>
Data Sample<Data>::rasm()
{
    Data max=0, min=10000;
    for(int i=0;i<n;i++)
    {
        if(a[i]<min)
            min=a[i];
        if(a[i]>max)
            max=a[i];
    }
    return max-min;
}
 
 template <class Data>
Data Sample<Data>::otkl()
{
    return sqrt(disp());
}
 
 
template <class Data>
double kohren(Sample <Data> *aa,int n)
{
   double s=0;
   double max=0;
   for(int i=0;i<n;i++)
   {
       if(max<aa[i].disp())
       max=aa[i].disp();
       s+=aa[i].disp();
   }
   return max/s;
}
 
 
int main()
{
    Sample <int> a;
    a.scan();
    cout<<"Srednee: "<<a.sred()<<endl;
    cout<<"dispersiya: "<<a.disp()<<endl;
    cout<<"rasmah: "<<a.rasm()<<endl;
    cout<<"srednee otklonenie: "<<a.otkl()<<endl;
    int n=3;
    Sample*aa=new int [n];
    for(int i=0;i<3;i++)
    aa[i].scan();
    cout<<"kriteriy kohrena "<<kohren (aa, n);
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2014, 22:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шаблонный класс, не работает с френд функцией (C++):

Шаблонный клас и странности с его функцией - C++
Здравствуйте! Тут у меня маленькая проблемка. Вот здесь описание класа и одной из его функций class volume: public vector&lt; vector&lt;...

Класс Matrix: реализовать шаблонный класс для двумерных массивов - C++
Доброго времени суток. У меня вопрос: я создал класс Array со внутренним динамическим массивом и объекты этого типа смог создать и я ими...

Шаблонный класс и класс одномерный массив - C++
Задание: протестировать класс шаблон, с обычными типами данных я понял как делать, а как передать в шаблон свой класс я не понял. ...

Переделать класс в шаблонный класс - C++
Как данный процесс проделать? Я попробовал так по синтаксису из учебника: #include &lt;iostream&gt; #include &lt;fstream&gt; using...

Шаблонный класс - C++
Я запутался с шаблонами. Не пойму никак как вызвать конструктор с введенным в функции check_int() значением и как дальше вызвать функции...

Шаблонный класс - C++
Создание шаблона класса с 1 параметром типа ( шаблонный класс ) По типу : Template&lt;Typename T&gt; Class... #include &lt;iostream&gt; ...

4
zss
Модератор
Эксперт С++
6404 / 5970 / 1945
Регистрация: 18.12.2011
Сообщений: 15,401
Завершенные тесты: 1
03.06.2014, 22:32 #2
С какой стати int?
C++
1
Sample*aa=new Sample[n];
0
Спайдермэн
0 / 0 / 0
Регистрация: 04.05.2014
Сообщений: 125
04.06.2014, 08:27  [ТС] #3
Все равно выдает ошибку Sample *aa=new Sample [n];

Добавлено через 47 секунд
если разделить на 2 строки, светит на первую
Sample *aa;
aa=new Sample [n];
0
Ilot
Модератор
Эксперт С++
1820 / 1178 / 232
Регистрация: 16.05.2013
Сообщений: 3,115
Записей в блоге: 5
Завершенные тесты: 1
04.06.2014, 08:36 #4
Вр-первых, неправильно объявленна дружественная функция. Следует вот так:
C++
1
2
3
4
5
6
7
8
template <class Data> class Sample //шаблонный класс выборка
{
...
public:
...
    template <typename T>
    friend double kohren(Sample<T> *aa, int n);
};
Во-вторых:
C++
1
    Sample<int> *aa=new Sample<int> [n];
1
Спайдермэн
0 / 0 / 0
Регистрация: 04.05.2014
Сообщений: 125
04.06.2014, 21:04  [ТС] #5
Спасибо, заработало! Скажите, а почему мы создали еще один шаблонный тип, <class T>? почему не использовали <class Data>?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2014, 21:04
Привет! Вот еще темы с ответами:

шаблонный класс - C++
реализован согласно &quot;Создание конструкторов и деструктора&quot; на шаблон класса с параметром -Тип данных в файле, редактируется (байт / слово /...

Шаблонный класс - C++
#include &lt;iostream&gt; using namespace std; template &lt;class T&gt; class Vector{ private: int size, capacity; T* data; public: ...

Шаблонный класс - C++
День добрый. Пишу матричный калькулятор на шаблонном классе. Хочу добиться того, чтобы можно было оперировать с матрицами всех численных...

Шаблонный класс - C++
Как его реализовать??? Смысл я понимаю, но вот как записать...не знаю:cry:


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
04.06.2014, 21:04
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru