Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
2 / 2 / 0
Регистрация: 12.06.2022
Сообщений: 175

Error: Выдаёт ошибку C2679 binary "[": не найден оператор, принимающий правый операнд типа "тип"

28.10.2022, 20:21. Показов 2513. Ответов 41

Студворк — интернет-сервис помощи студентам
В общем, проблемка такая. Я в программировании не особо силён. Нужно было построить класс для работы с односвязным списком. Элементы списка – целые числа. Создать список List1. Построить список List2, содержащий порядковые номера
максимальных элементов списка List1.

Проблемка в том, что мне просит компилятор перегрузить оператор индексирования [], только вот перегрузка имеется. Что делать, ума не приложу... В коде есть лишние функции, которые не используются, это норма

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
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
#include <iostream>
using namespace std;
 
/* оДНОсвязный список */
 
template <typename T> /* класс должен быть шаблонным */
class List
{
    
public:
    List(); /* конструктор */
    ~List(); /* деструктор */
    
    void pop_front();       /* прототип метода. Его задача - удалить первый элемент списка */
    void push_back(T data); /* прототип метода. Push_back - добавить данные в конец списка */
    bool end()
    {
        return(head = NULL);
    }
    void clear();             /* метод просто удаляет все элементы из списка */
    T& operator[](int index); /* перегрузка оператора. В параметрах - индекс (номер элемента) */
    friend ostream& operator<< (ostream& out, const List& list);
    
    
 
    void push_front(T data);        /* метод добавляет элемент в начало списка*/
    void pop_back();                /* удаляет элемент из конца списка */
    void insert(T data, int index); /* вставляет элемент по конкретному индексу */
    
    /* value - данные, index - индекс, по которому эти данные вставлены */
    void removeAt(int index);       /* удаляет элемент из списка по указанному индексу */
 
private:
    template <typename T> /* шаблон */
    class Node              /* вложенный класс (Node - узел) */
    {
    public:                 /* здесь уже все поля можно сделать public к, т.к. сам класс private */
        Node* pNext;        /* (pNext - pointer Next) - указатель на следующий элемент */
        T data;
        
        Node (T data = T(), Node* pNext = nullptr) /* конструктор для класса "Узел". nullptr - нулевой адрес*/
        {
            this->data = data;
            this->pNext = pNext;
        }
    };
 
    int Size; /* кол-во элементов в списке */
    Node <T>* head; /* указатель, так как все элементы одн. списка выделяются в динамич. памяти */
public:
    List& operator ++ ()
    {
        head = head->pNext;
        return *this;
    }
};
 
template <typename T>
List<T>::List() /* реализация конструктора */
{
    Size = 0;
    head = nullptr; /* список пуст */
}
 
template <typename T>
List<T>::~List() /*реализация деструктора*/
{
    cout << "Вызвался деструктор" << endl;
    clear();
}
 
template<typename T>
void List<T>::pop_front()
{
    Node<T>* temp = head; /* temp - временная переменная, хранящая адрес нулевого элемента списка */
    head = head->pNext; /* в head запишем адрес следующего элемента, который идёт за head'ом */
    delete temp; /* temp указывает на те данные, которые были нашим head'ом */
    Size--; /* так как мы удалили один из элементов, число элементов надо понизить на 1 */
}
 
template<typename T>
void List<T>::push_back(T data) /* к слову, мне программа помогла реализовать этот метод*/
{
    if (head == nullptr) /* проверяем на равенство head на ноль */
    {
        head = new Node<T>(data);
    }
    else
    {
        Node<T>* current = this->head; /*current (текущий) - временный объект*/
        while (current->pNext != nullptr)
        {
            current = current->pNext;
        }
        current->pNext = new Node<T>(data);
    }
    Size++;
}
 
template<typename T>
void List<T>::clear() /* метод просто удаляет все элементы из списка */
{
    while (Size) /*Size > 0, while == TRUE, Size = 0, while == FALSE (выход из цикла, если FALSE)*/
    {
        pop_front();
    }
}
 
template<typename T>
T& List<T>::operator[](int index)
{
    int counter = 0;
    Node<T>* current = this->head; /* current отвечает за нахождение в конкретном элементе */
    while (current != nullptr)     /* цикл работает до тех пор, пока current не станет указывать на ноль */
    {                          
        if (counter == index)      /* если ноль - мы в конце списка */
        {
            return current->data;  /* у текущего элемента заберём данные из поля data */
        }
        current = current->pNext;
        counter++;
    }
}
 
 
template<typename T>
void List<T>::push_front(T data)
{
    head = new Node<T>(data, head); /* переносим "голову" в адрес другого элемента */
    Size++;
}
 
template<typename T>
void List<T>::pop_back() /* удаляем последний элемент списка */
{
    removeAt(Size - 1); /* нумерация начинается с нуля. Допустим у нас элементы с инд. 0,1,2 - всего их три */
} /* чтобы получить доступ к последнему - просто
вычитаем единицу */
 
template<typename T>
void List<T>::insert(T data, int index)
{
    if (index == 0) /* если index = 0 */
    {
        push_front(data);
    }
    else
    {
        Node<T>* previous = this->head; /* previous - временный указатель */
 
        for (int i = 0; i < index - 1; i++) /* цикл находит элемент с индексом, предшествующим (int index) */
        { /* на место которого мы хотим поместить объект */
            previous = previous->pNext; /* "-1" означает "предыдущий", как и слово previous */
        } /*в этом цикле мы просто перебираем элементы, идущие по цепочке в списке*/
 
        Node<T>* newNode = new Node<T>(data, previous->pNext); /* объект указывает на след. объект */
        previous->pNext = newNode; /*помещаем наш новый объект по указанному индексу в список */
        /* newMode переменная по факту и не нужна. Это буфер */
        Size++;
    }
 
 
}
 
template<typename T>
void List<T>::removeAt(int index) /* логика примерно такая же, как и с insert, но ориентирована на удаление */
{
    if (index == 0)
    {
        pop_front();
    }
    else
    {
        Node<T>* previous = this->head; /* задача блока кода со 159-й по 163-й строчки - найти предыдущий элемент */
        for (int i = 0; i < index - 1; i++) /* относительно того, который мы хотим удалить */
        {
            previous = previous->pNext;
        }
 
        Node<T>* toDelete = previous->pNext; /* в toDelete лежит адрес старого элемента */
        previous->pNext = toDelete->pNext; /* в тот старый адрес мы помещаем адрес элемента, который мы хотим удалить*/
        delete toDelete; /* удаляем старый адрес */
        Size--; /* уменьшаем число элементов на единицу */
    }
}
 
template<typename T>
ostream& operator<<(ostream& out, const List<T>& list)
{
    for (List<T> i = list; !i.end(); ++i)
    {
        out << list << endl;
    }
    return out;
}
 
int main()
{
    setlocale(LC_ALL, "ru");
 
    List<int> List1;
    cout << "Введите число элементов: ";
    int NumbersCount; /* переменная для числа рандомных значений*/
    cin >> NumbersCount;
 
    for (int i = 0; i < NumbersCount; i++) /* цикл для заполнения списка элементами */
    {
        cout << "Введите объект " <<i+1<<": ";
        int number;
        cin >> number;
        List1.push_back (number); /* втыкаем номер в список */
    }
    
    for (int i = 0; i != NumbersCount; i++)
    {
        cout << List1[i] <<" "; /* вывод элементов списка */
    }
    cout << endl;
    
    /* формирование второго списка */
    List<int> List2;
    int max = 0, index = 0;
 
    for (List<int> i = List1; !i.end(); ++i)
    {                       
        if (max <= List1[i]) /* если макс. элемент меньше элемента по индексу i */
        {
            List2.clear();  /* чистим наш список */
            max = List1[i]; /* мы приравниваем макс. элемент к элементу с индексом  */
            index++;
        }
        
        /* MAX ЭЛЕМЕНТ ОН ПРАВИЛЬНО ОПРЕДЕЛИЛ !!! */
        if (max >= List1[i])
        {
            List2.push_back(index); /* вставляем элемент по опред. индексу. */
        }
    }
 
    ///* если будут одинаковые элементы, он выведет не все их индексы, а только последний... */
 
    cout << endl;
    cout << "Наибольший элемент: " << max << " " << endl;
    cout << "Порядковый номер наибольшего элемента: " << index; /* index определён верно! */
    cout << endl;
 
    cout << List2 << endl;
 
    cout << endl;
    system("pause");
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.10.2022, 20:21
Ответы с готовыми решениями:

Error C2679: бинарный "=": не найден оператор, принимающий правый операнд типа
Сразу скажу что в с++ полный ноль. Но есть потребность решить такую вот задачу: Нужно собрать систему распознавания и слежения за лицами...

Возвращение кортежа - error C2679: бинарный "=": не найден оператор, принимающий правый операнд типа
Привет есть функция, которая возвращает кортеж tuple&lt;X**, Math, int, int, std::vector&lt;std::vector&lt;int&gt;&gt;*&gt; я её...

Ошибка C2679: бинарный '=': не найден оператор, принимающий правый операнд типа 'double'
// ConsoleApplication2.cpp : Defines the entry point for the console application. // #include &quot;stdafx.h&quot; #include &quot;math.h&quot; ...

41
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
29.10.2022, 20:56
Студворк — интернет-сервис помощи студентам
Еще, уже чисто для спортивного интереса :
наполнение std::forward_list в конец списка
Поместить последовательность в односвязный список

Несколько функций работы с голыми указателями ну узлы :
https://www.cyberforum.ru/post16334506.html
Правда все выглядит очень сложно ? При этом еще и небезопасно.
1
2 / 2 / 0
Регистрация: 12.06.2022
Сообщений: 175
29.10.2022, 21:02  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Еще, уже чисто для спортивного интереса :
наполнение std::forward_list в конец списка
Поместить последовательность в односвязный список

Несколько функций работы с голыми указателями ну узлы :
https://www.cyberforum.ru/post16334506.html
Правда все выглядит очень сложно ? При этом еще и небезопасно.
Спасибо большое, обязательно прочту!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.10.2022, 21:02

Error C2679: бинарный "<<": не найден оператор, принимающий правый операнд типа "std::string" (или приемлемое
эмулятор работы банкомата Например #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;time.h&gt; ...

binary "оператор": не найден оператор, принимающий правый операнд типа "тип" (или приемлемое преобразование отсутствует)
Выдаёт ошибку С2679: бинарный &quot;-&quot; не найден оператор, принимающий правый операнд типа &quot;std::chrono::steady_clock::time_point&quot;(или...

Error C2679: бинарный ">>": не найден оператор, принимающий правый операнд
перелопатил кучу форумов, кругом одно и то же - якобы вставь библиотеку и будет счастье. раньше работало нормально. могут ли сторонние...

Error C2679: бинарный "=": не найден оператор, принимающий правый операнд
Ошибка 1 error C2679: бинарный &quot;=&quot;: не найден оператор, принимающий правый операнд типа...

Ошибка C2679 бинарный "<<": не найден оператор, принимающий правый операнд типа
void SerializeInstitute(ofstream&amp; fileStream, Institute imi) { fileStream &lt;&lt; &quot;Course{\n&quot; &lt;&lt; endl &lt;&lt; &quot;Students: &quot; &lt;&lt;...


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

Или воспользуйтесь поиском по форуму:
42
Ответ Создать тему
Новые блоги и статьи
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru