С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
👻👻👻
21 / 28 / 12
Регистрация: 22.04.2016
Сообщений: 166
1

Как реализовать метод шаблона вне класса?

26.06.2016, 14:49. Показов 2990. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
#include <iostream>
#include <string>
 
using namespace std; 
 
template <typename T = int> class item {
public:
    T data;
    void setData(T Data);
    void printData();
    T getData();
    template <typename U> void operator=(U other) {
        data = other.getData();
    }
    template <typename K> T setAverageFrom(K arr, int size) { //Этот метод
        int sum = 0;
        for (int i = 0; i < size; i++) {
            sum += arr[i].getData();
        }
        return static_cast<T>(sum / size);
    }
};
 
template <typename T> void item<T>::setData(T Data) {
    data = Data;
}
template <typename T> void item<T>::printData() {
    cout << data << "\n";
}
template <typename T> T item<T>::getData() {
    return data;
}
int main() {
    setlocale(0, "");
 
    const int size = 10;
    item <long> values[size];
 
    for (int nItem = 0; nItem < size; nItem++) values[nItem].setData(nItem * 40);
 
    item<float> floatItem;
    cout << floatItem.setAverageFrom(values, size);
 
    cin.get();
    return 0;
}
Пробовал вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
template <typename T = int> class item {
public:
    T data;
    void setData(T Data);
    void printData();
    T getData();
    template <typename U> void operator=(U other) {
        data = other.getData();
    }
    template <typename K> T setAverageFrom(K arr, int size);
};
 
...
 
template <typename K>
template <typename T>
K setAverageFrom(T arr, int size) {
    int sum = 0;
    for (int i = 0; i < size; i++) {
        sum += arr[i].getData();
    }
    return static_cast<K>(sum / size);
}
Но компилятор ругается:
C3857 setAverageFrom: множественные списки параметров шаблон не допускаются
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.06.2016, 14:49
Ответы с готовыми решениями:

Как реализовать вне класса тело метода?
int &amp;operator(int j){ if (n&lt; j || j &gt;= n) {cout &lt;&lt; &quot;\nIndex out of bounds&quot;; Sleep(2000);...

C++ и матан, как реализовать метод класса?
РЕбят, есть задание, как математически проверить то, что точки лежат на прямой исходя из ТЗ (с++)?...

задание реализовать в виде класса - шаблона
Друзья, осталось для зачета сделать одну лабу, а у меня не получается... Помогите, если вам не...

Как передать в метод класса Menu указатель на метод дочернего класса?
Как передать в метод базового класса указатель на метод дочернего: class Menu() { protected: ...

6
161 / 153 / 92
Регистрация: 18.11.2015
Сообщений: 677
26.06.2016, 15:04 2
Лучший ответ Сообщение было отмечено daniilorain как решение

Решение

Может так, хотя я не уверен

C++
1
2
3
4
5
6
7
8
9
10
template<typename T>
template<typename K>
T item<T>::setAverageFrom(K arr, int size)
{
    int sum = 0;
    for (int i = 0; i < size; i++) {
        sum += arr[i].getData();
    }
    return static_cast<K>(sum / size);
}
Добавлено через 33 секунды
А что она делать-то должна?
1
👻👻👻
21 / 28 / 12
Регистрация: 22.04.2016
Сообщений: 166
26.06.2016, 15:15  [ТС] 3
Чёрт побери, я-то думал, что проблема в чём-нибудь серьёзном, а тут такую-то ерундовину забыл
Среднее арифметическое находит.
0
161 / 153 / 92
Регистрация: 18.11.2015
Сообщений: 677
26.06.2016, 15:22 4
daniilorain, только у вас странный какой-то код, может у вас там что-то свое, но вот так он точно работает:

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
#include <iostream>
#include <string>
 
using namespace std;
 
template <typename T = int> class item {
public:
    T data;
    void setData(T Data);
    void printData();
    T getData();
    template <typename U> void operator=(U other) {
        data = other.getData();
    }
    template <typename K> T setAverageFrom(K* arr, int size);
};
 
template <typename T> void item<T>::setData(T Data) {
    data = Data;
}
template <typename T> void item<T>::printData() {
    cout << data << "\n";
}
 
template <typename T> T item<T>::getData() {
    return data;
}
 
template<typename T>
template<typename K>
T item<T>::setAverageFrom(K* arr, int size)
{
    int sum = 0;
    for (int i = 0; i < size; i++) {
        sum += arr[i].getData();
    }
    return static_cast<T>((sum / size));
}
 
int main() {
    setlocale(0, "");
 
    const int size = 10;
    item <long> values[size];
 
    for (int nItem = 0; nItem < size; nItem++) values[nItem].setData(nItem * 40);
 
    item<float> floatItem;
    cout << floatItem.setAverageFrom(values, size);
 
    cin.get();
    return 0;
}
0
👻👻👻
21 / 28 / 12
Регистрация: 22.04.2016
Сообщений: 166
26.06.2016, 15:34  [ТС] 5
Странный только из-за того, что один указатель не добавил?
0
161 / 153 / 92
Регистрация: 18.11.2015
Сообщений: 677
26.06.2016, 16:09 6
daniilorain, static_cast у вас тоже неверный был
0
👻👻👻
21 / 28 / 12
Регистрация: 22.04.2016
Сообщений: 166
26.06.2016, 16:17  [ТС] 7
Вы там только букву поменяли, но:
C++
1
2
3
4
5
6
7
8
9
template <typename K>
template <typename T>
K setAverageFrom(T arr, int size) {
    int sum = 0;
    for (int i = 0; i < size; i++) {
        sum += arr[i].getData();
    }
    return static_cast<K>(sum / size);
}
равно этому:

C++
1
2
3
4
5
6
7
8
9
template <typename T>
template <typename K>
T setAverageFrom(K arr, int size) {
    int sum = 0;
    for (int i = 0; i < size; i++) {
        sum += arr[i].getData();
    }
    return static_cast<T>(sum / size);
}
0
26.06.2016, 16:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.06.2016, 16:17
Помогаю со студенческими работами здесь

Не могу реализовать метод класса
Реализовать класс Bankomat, моделирующий работу банкомата. В классе должны содержаться поля для...

Как описать метод класса? Как двумя способами описать инлайнируемый метод класса? Что такое this?
Раздел 1. Строки: нужен фрагмент кода. Обязательно используйте функции для работы со строками. Как...

Реализовать метод append для класса String
Для работы со строками можно придумать множество полезных методов (подумайте, какие методы...

Не могу реализовать метод visit() класса List
Люди, помогите! Наверняка, известная задача:...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru