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

переопределение шаблонов - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ как работает программа? двойной указатель http://www.cyberforum.ru/cpp-beginners/thread768869.html
Здравствуйте,подскажите,пожалуйста,как работает программа! а в частности,зачем двойной указатель и как при помощи него все работает! void InsertNth(struct node** headRef, int index, int data) { if (index == 0) Push(headRef, data); else { struct node* current = *headRef; int i; for (i=0; i<index-1; i++)
C++ Ввести массив размерностью n элементов Ввести массив размерностью n элементов. N вводит пользователь. Вычислить среднее арифметическое положительных элементов массива. Буду очень благодарен. А то что то разобраться никак не могу. http://www.cyberforum.ru/cpp-beginners/thread768863.html
C++ Описать каталог сотовых телефонов
Доброе время суток! Исходные данные Дано: • название и структура таблицы данных, в которой хранятся записи; • класс, содержащий поля и функции. В каждом классе должны быть реализованы функции загрузки из файла и сохранения в файл, а также ряд дополнительных функций в соответствии с вариантом задания Поля -название каталога; -массив товаров;
C++ Нужен человек готовый объяснить некоторые вещи и исправить мои ошибки
Я изучаю C++ и мне хотелось бы найти человека, который сможет мне рассказать и показать, как исправить мои ошибки по мере их поступления. Для чего я это написал, просто делая некоторые примеры возникают проблемы с заданиями=> размещаю их на различных форумах=> жду много времени=> ни одного ответа. Просто простые задачи cout<< 2+2<<end; все кричат по 100 постов, а если попадается что-то...
C++ Описать структуру с именем TRAIN http://www.cyberforum.ru/cpp-beginners/thread768838.html
Вот задание Описать структуру с именем TRAIN, содержащий следующие поля: • Номер поезда; • Название пункта назначения; • Время отправления. Программа должна выполнять следующие действия: • Ввод данных в массив элементов типа TRAIN; • Благоустройство элементов под названием пункта назначения; • Вывод на экран информации о поездах, чье время отправления больше того, что вводится с...
C++ Комментарии и разбор кода #include "stdafx.h" #include "tchar.h" #include "iostream" #include "string" #include "math.h" #include "conio.h" using namespace std; class par { private: подробнее

Показать сообщение отдельно
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049

переопределение шаблонов - C++

22.01.2013, 15:07. Просмотров 812. Ответов 7
Метки (Все метки)

Есть такой код:

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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#ifndef ARRAY1_H
#define ARRAY1_H
 
#include <iostream>
#include <locale.h>
#include <assert.h>
using namespace std;
 
template<class V>
class Array
{
    template<class V>
    friend wostream& operator<<(wostream &, const Array<V> &);
    template<class V>
    friend wistream& operator>>(wistream &, const Array<V> &);
 
    public:
        Array(int = 10);
        Array(const Array &);
        ~Array();
        int getSize() const;
        const Array& operator=(const Array &);
 
        V operator==(const Array &) const;
        V operator!=(const Array &) const;
        V &operator[](int);
        static int getArrayCount();
 
    private:
        V *ptr;
        int size;
 
        static int ArrayCount;
};
 
template<class V>
int Array<V>::ArrayCount = 0;
 
template<class V>
Array<V>::Array(int arraySize)
{
    ++ArrayCount;
    size = arraySize;
    ptr = new V[size];
    assert(ptr != 0);           //завершение если память не выделена
 
    for(int i = 0; i < size; i++)
        ptr[i] = 0;                 //присвоение начальных значений
}
 
template<class V>
Array<V>::Array(const Array &init)
{
    ++ArrayCount;
    size = init.size;
    ptr = new V[size];
    assert(ptr != 0);           //завершение если память не выделена
 
    for(int i = 0; i < size; i++)
        ptr[i] = init.ptr[i];                   //копирование init в объект
}
 
template<class V>
Array<V>::~Array()
{
    --ArrayCount;
    delete []ptr;
}
 
template<class V>
int Array<V>::getSize() const {return size;}
 
template<class V>
const Array<V>& Array<V>::operator=(const Array &right)
{
    if(&right != this)
    {
        delete []ptr;
        size = right.size;
        ptr = new V[size];
        assert(ptr != 0);
 
        for(int i = 0; i < size; i++)
            ptr[i] = right.ptr[i];
    }
 
    return *this;               //позволяет = y = z
}
 
template<class V>
V Array<V>::operator ==(const Array &right) const
{
    if(size != right.size)
        return 0;
 
    for(int i = 0; i < size; i++)
        if(ptr[i] != right.ptr[i])
            return 0;
 
    return 1;
}
 
template<class V>
V Array<V>::operator !=(const Array &right) const
{
    if(size != right.size)
        return 1;
 
    for(int i = 0; i < size; i++)
        if(ptr[i] != right.ptr[i])
            return 1;
 
    return 0;
}
 
template<class V>
V &Array<V>::operator [](int subscript)
{
    assert(0 <= subscript && subscript < size);
 
    return ptr[subscript];
}
 
template<class V>
int Array<V>::getArrayCount() {return ArrayCount;}
 
template<class V>
wistream& operator>>(wistream &inpyt, const Array<V> &a)
{
    for(int i = 0; i < a.getSize(); i++)
        inpyt >> a.ptr[i];
 
    return inpyt;       //позволяет cin >> x >> y
}
 
template<class V>
wostream& operator<<(wostream &outpyt, const Array<V> &a)
{
    for(int i = 0; i < a.getSize(); i++)
    {
        outpyt << a.ptr[i] << ' ';
    }
 
    return outpyt;      //позволяет cout << x << y
}
#endif ARRAY1_H
а теперь нужно переопределить этот шаблон но уже явно для типа float...
создаю другой .h файл и делаю так:

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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#ifndef ARRAY2_H
#define ARRAY2_H
 
#include <iostream>
#include <locale.h>
#include <assert.h>
using namespace std;
 
template<int>
class Array
{
    template<int>
    friend wostream& operator<<(wostream &, const Array<int> &);
    template<int>
    friend wistream& operator>>(wistream &, const Array<int> &);
 
    public:
        Array(int = 10);
        Array(const Array &);
        ~Array();
        int getSize() const;
        const Array& operator=(const Array &);
 
        int operator==(const Array &) const;
        int operator!=(const Array &) const;
        int &operator[](int);
        static int getArrayCount();
 
    private:
        int *ptr;
        int size;
 
        static int ArrayCount;
};
 
template<int>
int Array<int>::ArrayCount = 0;
 
template<int>
Array<int>::Array(int arraySize)
{
    ++ArrayCount;
    size = arraySize;
    ptr = new int[size];
    assert(ptr != 0);           //завершение если память не выделена
 
    for(int i = 0; i < size; i++)
        ptr[i] = 0;                 //присвоение начальных значений
}
 
template<int>
Array<int>::Array(const Array &init)
{
    ++ArrayCount;
    size = init.size;
    ptr = new int[size];
    assert(ptr != 0);           //завершение если память не выделена
 
    for(int i = 0; i < size; i++)
        ptr[i] = init.ptr[i];                   //копирование init в объект
}
 
template<int>
Array<int>::~Array()
{
    --ArrayCount;
    delete []ptr;
}
 
template<int>
int Array<int>::getSize() const {return size;}
 
template<int>
const Array<int>& Array<T>::operator=(const Array &right)
{
    if(&right != this)
    {
        delete []ptr;
        size = right.size;
        ptr = new int[size];
        assert(ptr != 0);
 
        for(int i = 0; i < size; i++)
            ptr[i] = right.ptr[i];
    }
 
    return *this;               //позволяет = y = z
}
 
template<int>
int Array<int>::operator ==(const Array &right) const
{
    if(size != right.size)
        return 0;
 
    for(int i = 0; i < size; i++)
        if(ptr[i] != right.ptr[i])
            return 0;
 
    return 1;
}
 
template<int>
int Array<int>::operator !=(const Array &right) const
{
    if(size != right.size)
        return 1;
 
    for(int i = 0; i < size; i++)
        if(ptr[i] != right.ptr[i])
            return 1;
 
    return 0;
}
 
template<int>
int &Array<int>::operator [](int subscript)
{
    assert(0 <= subscript && subscript < size);
 
    return ptr[subscript];
}
 
template<int>
int Array<int>::getArrayCount() {return ArrayCount;}
 
template<int>
wistream& operator>>(wistream &inpyt, const Array<int> &a)
{
    for(int i = 0; i < a.getSize(); i++)
        inpyt >> a.ptr[i];
 
    return inpyt;       //позволяет cin >> x >> y
}
 
template<int>
wostream& operator<<(wostream &outpyt, const Array<int> &a)
{
    for(int i = 0; i < a.getSize(); i++)
    {
        outpyt << a.ptr[i] << ' ';
    }
 
    return outpyt;      //позволяет cout << x << y
}
 
#endif ARRAY2_H
Выдает:
C++
1
error C3855: 'Array': template parameter 'V' is incompatible with the declaration
И там дальше еще кучу ошибок... в чем может быть проблема? Заранее благодарю!
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru