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

Перегрузка << в шаблоне - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Примитивная игра на c++ http://www.cyberforum.ru/cpp-beginners/thread943190.html
Учу С++ потихоньку, дошёл до структур даннах, классов. Писал пока что консольные приложения. Возникла идея написать простенькую 2d игру, например, змейку/крестики-нолики/тетрис. Подкажите в какую сторону копать. Нужно ли Qt или OpenGL или можно пока без них обойтись? Можно ли в привычном Code::Blocks сделать или проще в Borland Builder? Что почитать по этой теме?
C++ Собственный манипулятор Здорова господа! Я пытаюсь создать свой собственный манипулятор, который будет принимать основу числа: десять шестнадцать и два и само число, и будет выводить число в соотсветствующей системе счисления. От я набраса примерно манипулятор //манипулятор вывода ostream& based(ostream& stream) { cout <<"mu tyt"<<endl; http://www.cyberforum.ru/cpp-beginners/thread943179.html
Вывести числа со специальным форматом C++
Всем привет! Есть задание: "Напишите программу, считывающую из файла числа, разделенные пробелами, и выводящую в другой файл числа, используя научный формат и точность, равную восьми в четырех полях по двадцать символов в строке". Что хотят в этом задании? Ведь не вместить 4 поля в одну строку из 20 символов (если точность 8 - это не вмещается).
C++ rand(time(NULL)
Необходимо получить диапозон случайных чисел от 1 до 6. Я это пытаюсь делать вот таким образом void main(){ srand(time(NULL)); int cub1=rand()%(1+5); int cub2=rand()%(1+5);
C++ Непонятный вывод значений синуса http://www.cyberforum.ru/cpp-beginners/thread943161.html
Есть вот такой код: #include <iostream> #include <cmath> using namespace std; const double pi = 3.14159265358979; int main() { cout <<sin(pi) <<endl
C++ Не получается заполнить массив целыми числами Почему результат при выводе не тот, который должен быть? Должно получится 2 4 6 8 10 12 14 16 18 20, а на самом деле 0 2 2 2 2 2 2 2 2 2 2? #include "stdafx.h" using namespace System; int main(array<System::String ^> ^args) { array<int> ^data = gcnew array<int>(10); подробнее

Показать сообщение отдельно
MbICJIuTeJIb_u3
KeM6Pug}I{a
49 / 49 / 2
Регистрация: 23.08.2013
Сообщений: 202
24.08.2013, 22:25     Перегрузка << в шаблоне
Ругается когда перегружаю
template < class T > ostream &operator<<(ostream &out, const ArrayList<T> &d);

Ошибки VS2010:

Ошибка 8 error C2676: бинарный "++": "std::ostream" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору d:\vc c++ temp\arraylist\arraylist\arraylist.h 163 1 ArrayList

Ошибка 7 error C2679: бинарный "!=": не найден оператор, принимающий правый операнд типа "int" (или приемлемое преобразование отсутствует) d:\vc c++ temp\arraylist\arraylist\arraylist.h 161 1 ArrayList


Весь код:

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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
#ifndef ArrayList_H
#define ArrayList_H
 
#include <stdexcept>
using std::runtime_error;
 
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
using std::ostream;
 
 
struct IllegalModificationException : public runtime_error
{
public:
    IllegalModificationException() : runtime_error( "IllegalModificationException" ) {}
    IllegalModificationException(char * ch) : runtime_error( ch ) {}
};
 
 
template<class T> class ArrayList 
{
 
friend ostream &operator<<(ostream &, const ArrayList &);
 
public:
    explicit ArrayList(int = 10);
    virtual ~ArrayList();
    void add(T&);
    int size();
    T &get(int);
    T &get(int) const;
    bool contains(const T&);
    T &remove(int);
 
private:
    int lenght;
    T ** mas;
    void setSize(int);
    void initMas();
    int seek;
    float shift;
    void removeHelper(T **temp,int index,int count,int count2);
};
 
template< class T > ArrayList < T > :: ArrayList(int d)
{
    setSize(d);
    shift = 2.0;
    seek = 0;
}
 
template< class T > ArrayList < T > :: ~ArrayList()
{
    delete [] mas;
}
 
template< class T > void ArrayList < T > :: initMas()
{
    mas = new T*[lenght];
}
 
template< class T > void ArrayList < T > :: setSize(int size)
{
    if(size > 0)
     lenght = size;
    else
       lenght = 10;
 
    initMas();
}
 
template< class T > int ArrayList < T > :: size()
{
    return seek;
}
 
template< class T> void ArrayList < T > :: add(T &obj)
{
 
    if(lenght == seek)
    {
        T ** temp = mas;
 
        lenght*= shift;
 
        mas = new T*[lenght];
 
        for(int i = 0; i < seek; i++)
        {
            mas[i] = temp[i];
        }
 
        delete [] temp;
 
    }
    mas[seek++] = &obj;
}
 
 
template < class T > T &ArrayList < T > :: get(int index) throw (IllegalModificationException)
{
    if(!(index > seek || index < 0))
    {
        return *mas[index];
    }
    else
    {
        throw IllegalModificationException("Illegal invoke");
    }
}
 
template < class T> T &ArrayList < T > :: get(int index) const throw (IllegalModificationException) 
{
    if(!(index > seek || index < seek))
    {
        return mas[index];
    }
    else
    {
        throw IllegalModificationException("Illegal invoke");
    }
}
 
template < class T > bool ArrayList < T > :: contains(const T &obj)
{
    for(int i = 0; i < seek; i++)
    {
        if(mas[i] == obj)
        {
            return true;
        }
    }
 
    return false;
}
 
template < class T > T &ArrayList < T > :: remove(int index) throw (IllegalModificationException)
{
    if(index > seek || index < 0)
    {
        throw IllegalModificationException();
    }
    else
    {
        T **temp = new T*[size()-1];
        int count = 0,count2 = 0;
 
        removeHelper(temp,index,count,count2);
        mas = temp;
 
        delete [] temp;
    }
}
 
template < class T > void ArrayList < T > :: removeHelper(T **temp,int index,int count,int count2)
{
    if(count < size()-1)
    {
        if(cout != index)
        {
            temp[count++] = mas[count2++]; 
        }
        else
        {
            count2++;
        }
        removeHelper(temp,index,count,count2);
    }
}
template < class T > ostream &operator<<(ostream &out, const ArrayList<T> &d)
{
    for(int i = 0; i < d.size(); i++)
    {
        out << "["<< i << "]" << " :: " << i;
        if((i + 1) % 5 = 0)
        {
            out << endl;
        }
    }
 
    return out;
}
 
#endif
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 11:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru