Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
1 / 1 / 4
Регистрация: 05.05.2017
Сообщений: 521

Шаблонная функция поиска, перегруженное сравнение

23.04.2019, 12:03. Показов 1133. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть два класса Student и Prepod оба наследуются от People. В list хранятся ссылки list<People*>
Операторы сравнения перегрузил. Хочу написать функцию поиска в list,
C++
1
2
3
4
5
6
7
8
template<typename T>
T findInList(list<T> dataList, T data) {
    for (int i = 0; i < dataList.size(); ++i)
        if (*(dataList[i]) == *data)
            return dataList[i];
 
    return nullptr;
}
Как обратится к объекту в list так чтобы запускалось перегруженное сравнение?
Code
1
Ошибка    C2676   бинарный "[": "std::list<People *,std::allocator<_Ty>>" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.04.2019, 12:03
Ответы с готовыми решениями:

Шаблонная функция поиска максимального из 5 элементов
Помогите найти ошибку(и) Условие: Напишите шаблонную функцию max5(), которая принимает в качестве аргумента массив из пяти элементов...

Шаблонная функция С++
Помогите пожалуйсто понять ошибку Используется шаблонная функция в первом вызове она отображает значение типа int во втором типа double...

Шаблонная функция
Помогите понять почему когда вызываешь функцию уже для конкретного типа (int,char*,double и т.п.)выдает ошибку: Error C2440 'type cast':...

5
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
23.04.2019, 14:11
Pantheonptz,
C++
1
2
3
4
5
6
7
template<typename T>
T* findInList(const std::list<T*>& dataList, const T& data)
{
    auto p = find_if(dataList.begin(), dataList.end(), [&](const T* arg) {return *arg == data; });
    if (p != dataList.end()) return *p;
    return nullptr;
}
0
1 / 1 / 4
Регистрация: 05.05.2017
Сообщений: 521
23.04.2019, 23:36  [ТС]
Ругается на return *arg == data;
C++
1
2
 list<People*> peoples_list;
                    if (People *findIter = findInList(peoples_list, (People)Student(name))) {
Code
1
бинарный "==": не найден оператор, принимающий левый операнд типа "const T" (или приемлемое преобразование отсутствует)
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
24.04.2019, 00:04
Цитата Сообщение от Pantheonptz Посмотреть сообщение
бинарный "==": не найден оператор
А он у вас перегружен?
0
1 / 1 / 4
Регистрация: 05.05.2017
Сообщений: 521
24.04.2019, 00:27  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class People
{
protected:
    string name;
public:
    People();
    People(string name) : name{ name } {}
    string getName();
    void setName(string name);
    virtual ~People();
    virtual void print(std::ostream&) {};
    virtual bool operator==(People &other) { return name == other.name; };
    virtual void* getAsStudent() { return this; };
    friend std::ostream& operator<< (std::ostream &out, People &people) { people.print(out); return out; };
};
Добавлено через 43 секунды
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
class Student :
    virtual public People
{
private:
    int count;
    LinkedList<Match*>* matches;
public:
    Student();
    Student(string name) : People{ name } { count = 0; matches = new LinkedList<Match*>(); };
    int getCount();
    void setCount(int count);
    void addMatch(Predmet* predmet, short mark);
    void addMatch(Match * match);
    void changeMatch(Predmet* predmet, short mark);
    LinkedList<Match*>* getMatches() { return matches; }
    void delMatch(Predmet* predmet);
    void* getAsStudent() { return this; };
    float getAvg();
    string getName();
    friend std::ostream& operator<< (std::ostream &out, Student &student);
    bool operator==(Student &other) { return name == other.name; }
    void print(std::ostream &out);
    ~Student();
};
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
24.04.2019, 01:06
Pantheonptz, в классе Student он не нужен, оставьте только в базовом:
C++
1
bool operator==(const People &other) const { return name == other.name; }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.04.2019, 01:06
Помогаю со студенческими работами здесь

Шаблонная функция
Дорогие форумчане, нуждаюсь в вашей помощи: имеется несколько функций, с большим объемом кода. Чтоб не повторять код для функций с другим...

Шаблонная функция
Учу c++, в книге приводится вот такой листинг примера работы шаблонной функции, однако он не компилится, выдает ошибку error C2668: swap:...

Шаблонная функция
Как &quot;научить&quot; шаблонную функцию отличать массив от контейнера, то есть если написать: template &lt;class contains, class type&gt; type...

Шаблонная функция
Нужно создать шаблонную функцию, в которой массив сортируется пузырьком, поиск максимального и минимального значения! Вот с поиском...

Шаблонная функция
Всем привет. Пытаюсь реализовать простенький парсер. Суть в том, что у меня есть ini файл с различными параметрами. Я все секции с...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Функция установки текстового статуса в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru