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

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

Восстановить пароль Регистрация
 
Спайдермэн
0 / 0 / 0
Регистрация: 04.05.2014
Сообщений: 125
03.06.2014, 22:26     Шаблонный класс, не работает с френд функцией #1
Переделал программу под шаблонный класс, все методы работают справно когда задаешь тип. Да вот только проблема с френд функцией. Светит ошибку на выделение динамической памяти в мейне 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2014, 22:26     Шаблонный класс, не работает с френд функцией
Посмотрите здесь:

C++ Шаблонный класс
Переделать класс в шаблонный класс C++
Шаблонный клас и странности с его функцией C++
C++ Шаблонный класс
Шаблонный класс C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
03.06.2014, 22:32     Шаблонный класс, не работает с френд функцией #2
С какой стати int?
C++
1
Sample*aa=new Sample[n];
Спайдермэн
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];
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 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];
Спайдермэн
0 / 0 / 0
Регистрация: 04.05.2014
Сообщений: 125
04.06.2014, 21:04  [ТС]     Шаблонный класс, не работает с френд функцией #5
Спасибо, заработало! Скажите, а почему мы создали еще один шаблонный тип, <class T>? почему не использовали <class Data>?
Yandex
Объявления
04.06.2014, 21:04     Шаблонный класс, не работает с френд функцией
Ответ Создать тему
Опции темы

Текущее время: 09:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru