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

typename. Проблемы с вложенными шаблонными типами - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ шифрования http://www.cyberforum.ru/cpp-beginners/thread795838.html
Помогите мне с этим кодом, не работает должным образом... Он должен шифровать текст в текстовом файле encode.txt, а затем он должен расшифровать текст в текстовый файл decode.txt и необходимо ввести ключа шифрования. #include <iostream> #include <fstream> #include <string> #include <conio.h> using namespace std;
C++ графический режим Подскажите пожалуйста, как программируя в dev cpp получить цвет заднего фона в графическом режиме? Какой функцией? http://www.cyberforum.ru/cpp-beginners/thread795834.html
Как вам моя идея? C++
Собираюсь делать какую нибудь программу. Вот идея такая(программа для нас программистов): программа для создания матрицы, будут что то типо холста и пользователь сможет загружать обьект матрицы (картинка, цыфра-индикатор что то типо этого), а потом сохракнять матрицу в текстовом файле, затем копировать и спокойно пользоваться в своей проге. Что скажете? Есть ли аналоги? Нужна ли она вообще?
C++ Очистка потока ввода && строки
как вобще грамотно очистить поток после ввода множества всяких вещей с клавиатуры? если совсем не чистить то остаются нажатия клавиши enter, если применять такой код cin.clear(); while(cin.get() != '\n'); cin.get(); в конце каждой функции в программе, где происходит ввод, то в итоге пользователю приходится 4-5 лишних раз давить enter после ввода чего либо, т.е. эффект обратный. как...
C++ Дана последовательность из n натуральных чисел http://www.cyberforum.ru/cpp-beginners/thread795790.html
Дорогие форумчане, помогите пожалуйста. Дана последовательность из n натуральных чисел. Для каждого числа исходной последовательности подсчитать количество и сумму четных цифр в записи числа. Сформировать новую последовательность, поместив в нее сначала количества четных цифр в записи числа, а затем их суммы.Упорядочить первую половину полученной последовательности в порядке возрастания , а...
C++ Найти в массиве максимальный и минимальный элементы в массиве и их количество Помогите, пожалуйста, начал осваивать c++...Не могу справиться с такой задачей: Написать программу, которая вводит с клавиатуры массив из N вещественных чисел, находит среди элементов максимальный и минимальный элементы и их количество и выводит результат пользователю. Добавлено через 27 минут Люди...хэлп...срочно очень надо #include <iostream> #include <cstdlib> using namespace std; ... подробнее

Показать сообщение отдельно
unkarjedy
3 / 3 / 0
Регистрация: 13.03.2011
Сообщений: 114
26.02.2013, 23:25     typename. Проблемы с вложенными шаблонными типами
Здравствуйте.
Реализовываю шаблонный список.

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
/* 
* List.h
*/
#pragma once
 
#include <iostream>
using namespace std;
 
// List class defenition===============================================================================================
template<class T> class List
{
public:
    template<class T> class Elem
    {
    private:
        friend class List;
        T data;
        Elem<T> *next;
    public:
        Elem ()     { data = T(); next = NULL; };
        Elem (T t)  { data = t; next = NULL; };
    };
private:
    Elem<T> *first;
    Elem<T> *last;
public:
    List (){ first = NULL; last = NULL;};
    ~List ();
 
    inline Elem<T>* GetFirst () const { return first; };
    inline Elem<T>* GetLast ()  const { return last; };
    inline Elem<T>* GetNext (Elem<T>* e) const { return e->next; };
    inline T GetData (Elem<T> *e) const { return e->data; };
    inline bool IsEmpty () const { return first == NULL; }
    void Print(const char* separate = " ") const;
 
    int Add (T t);
    int Insert (T t, Elem<T> *e);
    Elem<T>* Find(T data) const;
    int RemoveNext (Elem<T> *e);
    int Remove (Elem<T> *e);
    int Remove (T data);
    inline void push_back (T t) { Insert(t, last); }
    inline void push_front (T t) { Add(t); }
    
 
    template<class T> class iterator
    {
    private: 
        Elem<T>* elem;
    public:
        iterator() { elem = NULL; }
        iterator(Elem<T>* e) { elem = e; }        
 
        iterator<T>& operator++ () { elem = elem->next; return *this; }
        bool operator == (iterator<T> it) { return elem == it.elem; }
        bool operator != (iterator<T> it) { return elem != it.elem; }
        T operator* (){return elem->data;}
    };
    iterator begin() const { return first; }
    iterator end()   const { return NULL; } // sheet
}; //===============================================================================================
 
 
template<class T>
List<T>::~List(){
    if(IsEmpty()) return;
 
    Elem *t = first;
 
    while(t) {
        Elem *tmp = t->next;
        delete(t);
        t = tmp;
    }
};
 
template<class T>
int List<T>::Add(T t) {
    Elem *pe = new Elem<T>(t);
    if(!pe) {
        cerr << "Memory error!";
        return 1;
    }
    
    if(IsEmpty())  
        first = last = pe;
    else {
        pe->next = first;
        first = pe;
    }
 
    return 0;
}
 
template<class T>
int List<T>::Insert(T t, Elem<T>* e) {
    Elem *pe = new Elem(t);
    if(!pe) {
        cerr << "Memory error!";
        return 1;
    } 
 
    if(IsEmpty())  
        first = last = pe;
    else {
        pe->next = e->next;
        e->next = pe;
 
        if(e == last) last = pe;
    }
 
    return 0;
}
 
template<class T>
List<T>::Elem<T>* List::Find(T data) const {
    Elem<T>* cur = GetFirst();
 
    while(cur != NULL) {
        if(cur->data == data) break;
        cur = cur->next;
    }
 
    return cur;
}
 
template<class T>
int List<T>::RemoveNext(Elem<T>* e) {
    if(IsEmpty() || e == last) return 1;
 
    Elem* tmp = e->next;
    e->next = e->next->next;
    delete tmp;
    return 0;
}
 
//do not Removes last element
template<class T>
int List<T>::Remove(Elem<T>* e) {
    if(IsEmpty()) return 1;
    if(e == NULL) return 2;
 
    Elem<T>* tmp = e->next;
    e->data = e->next->data;
    e->next= e->next->next;
    delete tmp;
    return 0;
}
 
template<class T>
int List<T>::Remove(T data) {
    Elem<T>* tmp = Find(data);
    return Remove(tmp);
}
 
template<class T>
void List<T>::Print(const char* separate) const {
    List::iterator<T> cur;
    for(cur = this->begin(); cur != this->end(); ++cur) {
        cout << *cur;
        cout << separate;
    }
}
Проблема одна:
в строке 116 - 117 возращаемое значение метода - шаблонный класс Elem<T>, определённый внутри шаблонного класса List<T>.

Вот что выдаёт компилятор:

c:\users\user\desktop\projects\console_trash\console_trash\list.h(117): warning C4346: List<T>::?$Elem@$RT@BAAB@: зависимое имя не является типом
1> укажите префикс "typename" для задания типа
1>c:\users\user\desktop\projects\console_trash\console_trash\list.h(117): error C2143: синтаксическая ошибка: отсутствие ";" перед "*"
1>c:\users\user\desktop\projects\console_trash\console_trash\list.h(117): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\users\user\desktop\projects\console_trash\console_trash\list.h(117): error C2936: List<T>::Elem<T>: идентификатор класса шаблона переопределен как глобальная переменная данных
1>c:\users\user\desktop\projects\console_trash\console_trash\list.h(117): fatal error C1903: не удается восстановить после предыдущих ошибок; остановка компиляции


Полазил по сети поискал о typename - и ничего итого не нашёл.
Что нужно сделать, чтобы класс Elem был виден "нормально".
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru