С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/34: Рейтинг темы: голосов - 34, средняя оценка - 4.62
13 / 18 / 6
Регистрация: 02.05.2018
Сообщений: 545
1

Ошибка "Шаблон класса уже определен"

17.05.2019, 22:16. Показов 7137. Ответов 10
Метки нет (Все метки)

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
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
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
template <class T>
struct Node                             //Структура, являющаяся звеном списка
 {
 public:
    T data;                             //Значение x будет передаваться в список
    Node<T> *Next, *Prev;                 //Указатели на адреса следующего и предыдущего элементов списка
    Node(T _data) :data(_data), Next(0), Prev(0) {}  // конструктор по умолчанию     
};
 
template <class T>
 class MyList                              //Создаем тип данных Список
 {
public:
    Node<T> *Head;                 //Указатели на адреса начала списка и его конца
    Node<T> *Tail;
    int size;  // размер списка
 
    MyList():Head(0),Tail(0), size(0) {};    //Инициализируем адреса как пустые
    MyList(const MyList& list)   // конструктор копирования
    {
        Head = 0;
        Tail = 0;
        size = 0;
        for (int i=0; i<list.size-1; ++i)
        {
            Add(list.GetData(i));
        }
    }  
    MyList& operator=(const MyList& list)
    {
        while(size)
        {
            Remove(size-1);
        }
        for(int i = 0; i < list.size; ++i)
        {
            Add(list.GetData(i));
        }
        return *this;
    }   
    ~MyList()                           //Прототип деструктора
    {
        while (Head)                       //Пока по адресу на начало списка что-то есть
        {
            Tail = Head->Next;             //Резервная копия адреса следующего звена списка
            delete Head;                   //Очистка памяти от первого звена
            Head = Tail;                   //Смена адреса начала на адрес следующего элемента
        }
    }
    
    void Show()                       //Прототип функции отображения списка на экране
    {
        Node<T> *temp = Head;
 
        if(temp == 0)
        {
            cout << "Список пуст!" << endl;
        }
        else
        {
            while(temp)
            {
                temp->data.display();
                temp = temp->Next;
            }
        }
    }
    
    void Add(T data)                   //Прототип функции добавления элементов в список
    {
        Node<T> *temp = new Node<T>(data);               //Выделение памяти под новый элемент структуры
 
        if (Tail)
        {
            temp->Prev = Tail;
            Tail->Next = temp;
            Tail = temp;
        }
        else
        {
            Head = Tail = temp;
        }
 
        size++;
    }
    
    int GetSize()  // получаем размер списка
    {
        Node<T> *temp = Head;
        int i(0);
 
        while(temp)
        {
            i++;
            temp = temp->Next;
        }
 
        return i;
    }
    
    void Remove(int index)  // удаление по индексу
    {
        Node<T> *temp = Head;
 
        if ((index > size) || (index < 0))    //если указанный элемент не существует, то
        {   
            cout << "Задайте другой индекс!!!" << endl;  //выводим предупреждение на экран
        }
        else
        {
            for(int i = 0; i != index; i++)  //иначе, переходим до этого элемента
            {
                temp = temp->Next;
            }
 
        if (temp->Prev == 0)        //если удаляем первый элемент
        {
            if (size == 1)         //если этот элемент единственный
            {
                Head = 0;
                Tail = 0;
            }
            else                //если он первый, но не единственный
            {
                temp->Next->Prev = 0;
                Head = temp->Next;
            }
 
            delete temp;
            size--;
            return;
        }
 
        if (temp->Next == 0)        //если удаляем последний элемент, то
        {
            temp->Prev->Next = 0;   //предыдущий элемент указывает на NULL
            Tail = temp->Prev;        //указатель на последний элемент указывает на предпоследний
 
            delete temp;
            size--;
            return;
        }       
 
        //если элемент находится в центре списка
        if (temp->Next != 0 && temp->Prev != 0) 
        {
            temp->Prev->Next = temp->Next; //предыдущий элемент указывает на следующий
            temp->Next->Prev = temp->Prev; //следующий указывает на предыдущий
            delete temp;
            size--;
            return;
        }
    }
}
    
    void Clear() // ф-я для очищения списка, хотя детруктор и так долен очищать список после работы
    {
        while(Head)
        {
            Tail = Head->Next;
            delete Head;
            Head = Tail;
        }
    }
    
    Node<T>* GetNode(int index) const   // получаем элемент по индексу
    {
        if ((index > size) || (index < 0))    //если указанный элемент не существует, то
        {   
            cout << "Задайте другой индекс!!!" << endl;  //выводим предупреждение на экран
        }
        Node<T> *temp = Head;
        int i = 0;
        while(temp && i < index)
        {
            temp = temp->Next;
            i++;
        }
        return temp;
    }
 
    const T& GetData(int index) const
    {
        if(GetNode(index))
        {
            return GetNode(index)->data;
        }
        else
        {
            throw std::out_of_range("index out range");
        }
    }
 
    T& GetData(int index)
    {
        const auto& me = *this;
        const T& data = me.GetData(index);
        return const_cast<T&>(data);
    }
 
};
скрин ошибок прикрепил

До этого все работало, сломался после того как присобачил компаратор для сортировки и паттерн стратегия. Вернул все назад но ошибки не исчезли.
Миниатюры
Ошибка "Шаблон класса уже определен"   Ошибка "Шаблон класса уже определен"  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.05.2019, 22:16
Ответы с готовыми решениями:

Ошибка C2953: шаблон класса уже определен
Доброго времени суток! Пытаюсь реализовать свой vector и iterator для него (файл v.h): #include...

Ошибка компиляции "List шаблон класса уже определен"
Имеется заголовочный файл и файл реализации, при попытке компиляции выдает ошибку &quot;List шаблон...

Шаблон: Метод text() не определен для объекта класса TreeWidget
Есть код:template&lt;MainMenuGenerator::ElementTypes type, class T&gt; TreeWidgetItem...

Ошибка: LNK2005 <Имя> уже определен в cities.obj
Определяю переменные для нескольких файлов программ, но получаю ошибки. Не могу найти решение....

10
13 / 18 / 6
Регистрация: 02.05.2018
Сообщений: 545
17.05.2019, 22:25  [ТС] 2
если не подключать "Strategy.h" ошибки исчезают

Вот содержимое "Strategy.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
#include "MyList.h"
 
// Иерархия классов, определяющая алгоритмы сортировки списка
class Sort
{
public:
    virtual ~Sort() {}
    virtual void sort(const MyList<Banner> &list) = 0;
};
 
class RDA_Sort : public Sort
{
public:
    void sort(const MyList<Banner> &list)
    {
        std::cout << "RDA_Sort" << endl; 
    }
};
 
class RDI_Sort : public Sort
{
public:
    void sort(const MyList<Banner> &list)
    {
        std::cout << "RDI_Sort" << endl; 
    }
};
 
// Класс для использования
class MySort
{
private:
    Sort* p;
public:
    MySort(Sort* _sort) : p(_sort) {}
    ~MySort() {delete p; }
    void sort(const MyList<Banner> &list)
    {
        p->sort(list);
    };
};
0
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
17.05.2019, 22:28 3
Лучший ответ Сообщение было отмечено cherc как решение

Решение

Цитата Сообщение от cherc Посмотреть сообщение
sort(const MyList<Banner> &list)
а как сортировать константный список?
1
13 / 18 / 6
Регистрация: 02.05.2018
Сообщений: 545
17.05.2019, 22:30  [ТС] 4
zayats80888, ошибки не исчезли (
0
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
17.05.2019, 22:32 5
На скрине я вижу список указателей, а в sort список экземпляров
1
13 / 18 / 6
Регистрация: 02.05.2018
Сообщений: 545
17.05.2019, 22:37  [ТС] 6
zayats80888, я в sort передаю другой список, я никакие методы из "Strategy.h" не вызываю, никаких классов не создаю, а ошибки почему то из-за него появляются
0
13 / 18 / 6
Регистрация: 02.05.2018
Сообщений: 545
17.05.2019, 22:39  [ТС] 7
на скрине выделил синим список который я туда буду передавать
Миниатюры
Ошибка "Шаблон класса уже определен"  
0
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
17.05.2019, 23:03 8
там в ошибках указан файл и номер строки, их нужно глянуть

Добавлено через 1 минуту
Лучше скиньте архив с проектом, что бы не засорять тему
0
13 / 18 / 6
Регистрация: 02.05.2018
Сообщений: 545
17.05.2019, 23:07  [ТС] 9
zayats80888,
Вложения
Тип файла: rar ТиМП 4 семестр.rar (14.79 Мб, 4 просмотров)
0
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
17.05.2019, 23:41 10
Лучший ответ Сообщение было отмечено cherc как решение

Решение

в MyList.h добавь #pragma once, и вообще нужно делать защиту заголовков
1
13 / 18 / 6
Регистрация: 02.05.2018
Сообщений: 545
17.05.2019, 23:45  [ТС] 11
zayats80888, спасибо, работает
0
17.05.2019, 23:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.05.2019, 23:45
Помогаю со студенческими работами здесь

Ошибка 2005 _main уже определен в Interface.obj хотя ни ссылок, ни main я не нашла
Вот как бы два проекта, не нашла проблем, отдельно они компилятся, сижу, читаю форумы, но ничего...

Шаблоны функций, Ошибка: для использования класса шаблон требуется список аргументов шаблон
Есть у меня 3 структуры Трамвай , Троллейбус , Автобус. Для автобуса определены функции (работают)...

Ошибка "Объект уже определен" (LNK2005)
если в ставить этот код в h файл то пишет ошибку не знаю уже как решить её не где нету enum Tabs с...

Какой шаблон тут используется? Шаблон класса или шаблон функции
Какой шаблон тут используется? Шаблон класса или шаблон функции,и с объяснениями пожалуйста ...

Ошибка "идентификатор не определен" при создании производного класса
всем доброго времени суток. пытаюсь создать производный класс для machine, в котором нужно вывести...

Уже определен в main.obj
main.cpp #include &lt;iostream&gt; #include &lt;ctime&gt; #include &quot;inventory.h&quot; using namespace std; ...

Шаблон класса,ошибка TEMPLATE
Вечер добрый,с таким вопросом. Задание: шаблон класса &quot;однонарпавленный линейный список&quot;. И...


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

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