|
0 / 0 / 0
Регистрация: 11.08.2015
Сообщений: 123
|
||||||||||||||||
Std::set с кастомным классом, как правильно перегрузить оператор < ?11.11.2018, 13:42. Показов 3890. Ответов 48
Метки нет (Все метки)
Доброго времени суток, у меня имееться такой класс:
p.s. кто-то может еще подсказать почему в методе bool operator<(const Truck& rhs)const, метод getNumber() я не могу вызвать.
0
|
||||||||||||||||
| 11.11.2018, 13:42 | |
|
Ответы с готовыми решениями:
48
Как правильно перегрузить оператор для шаблона класса Как правильно перегрузить оператор умножения числа на матрицу? |
|
166 / 109 / 57
Регистрация: 30.08.2018
Сообщений: 357
|
|||||||
| 11.11.2018, 14:26 | |||||||
|
Вот сюда просится const
1
|
|||||||
|
0 / 0 / 0
Регистрация: 11.08.2015
Сообщений: 123
|
|||||||||||
| 11.11.2018, 14:49 [ТС] | |||||||||||
|
А не могли бы подсказать, почему у меня на emplace ругается?
И почему с использованием слова const метод начинает видеть, хотя он по идеи public? Похожая проблема и с другим методом
0
|
|||||||||||
|
166 / 109 / 57
Регистрация: 30.08.2018
Сообщений: 357
|
|||
| 11.11.2018, 14:56 | |||
|
Нужно больше кода. код который показываете рабочий. Добавлено через 1 минуту Добавлено через 41 секунду Не по теме: Smeh_, ушел по делам, сори
0
|
|||
|
0 / 0 / 0
Регистрация: 11.08.2015
Сообщений: 123
|
|||||||||||
| 11.11.2018, 15:08 [ТС] | |||||||||||
|
вот класс главного окна(руки из жопы не могу в спойлер засунуть :/ ):
Вот метод в котором проблемы с emplace и возвращаемым std:: pair:
mainwindow.obj:-1: error: LNK2019: unresolved external symbol "public: unsigned int __thiscall Truck::getNumber(void)const " (?getNumber@Truck@@QBEIXZ) referenced in function "public: bool __thiscall Truck::operator<(class Truck const &)const " (??MTruck@@QBE_NABV0@@Z) mainwindow.obj:-1: error: LNK2019: unresolved external symbol "public: __thiscall Truck::Truck(unsigned int,class QString)" (??0Truck@@QAE@IVQString@@@Z) referenced in function "public: void __thiscall std::allocator<struct std::_Tree_node<class Truck,void *> >::construct<class Truck,unsigned int &,class QString const &>(class Truck *,unsigned int &,class QString const &)" (??$construct@VTruck@@AAIABVQString@@@?$ allocator@U?$_Tree_node@VTruck@@PAX@std@ @@std@@QAEXPAVTruck@@AAIABVQString@@@Z) mainwindow.obj:-1: error: LNK2019: unresolved external symbol "public: void __thiscall Truck::addTimeWeight(class QString,class QString)const " (?addTimeWeight@Truck@@QBEXVQString@@0@Z ) referenced in function "private: void __thiscall MainWindow: arseFile(void)" (?parseFile@MainWindow@@AAEXXZ)
0
|
|||||||||||
|
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
|
|
| 11.11.2018, 15:14 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 11.08.2015
Сообщений: 123
|
||||||
| 11.11.2018, 15:17 [ТС] | ||||||
|
Вот конструктор.
0
|
||||||
|
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
|
|
| 11.11.2018, 15:22 | |
|
Smeh_, так он у Вас принимает QString или std::string? Измените реализацию на std::string.
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|
| 11.11.2018, 15:25 | |
|
Smeh_, а вы файл с реализацией методов класса Truck не забыли в проект добавить?
0
|
|
|
0 / 0 / 0
Регистрация: 11.08.2015
Сообщений: 123
|
||||||
| 11.11.2018, 15:30 [ТС] | ||||||
|
во втором сообщении я поменял std::string на QString
Добавлено через 1 минуту в файле mainwindow.hpp
0
|
||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
||
| 11.11.2018, 15:44 | ||
|
Раз вы не поняли о чем, то похоже действительно не добавили. Файл truck.cpp у вас в pro-файле прописан?
0
|
||
|
0 / 0 / 0
Регистрация: 11.08.2015
Сообщений: 123
|
|
| 11.11.2018, 15:46 [ТС] | |
|
По идеи прописан :/
SOURCES += \ main.cpp \ mainwindow.cpp \ truck.cpp HEADERS += \ mainwindow.h \ truck.h
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|
| 11.11.2018, 15:53 | |
|
Smeh_, У вас линковщик не может найти определения функций. Так бывает, если файл с определениями не участвует в сборке. Возможно стоит перегенерировать сборку из pro.
1
|
|
|
0 / 0 / 0
Регистрация: 11.08.2015
Сообщений: 123
|
|
| 11.11.2018, 16:04 [ТС] | |
|
Верите или нет, я вызвал Clean All по многу раз и Build all, сейчас в QtCreatore вызвал "run qmake" и эта дура перестала ругаться :/
Спасибо.
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|
| 11.11.2018, 16:33 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 11.08.2015
Сообщений: 123
|
|||||||||||||||||||||
| 11.11.2018, 17:18 [ТС] | |||||||||||||||||||||
|
А не могли бы Вы мне помочь в другом вопросе?
C:\Project\viz_tz\truck.cpp:16: error: C2662: 'std:: pair<std::_Tree_iterator<std::_Tree_val< std::_Tree_simple_types<std:: pair<const _Kty,_Ty>>>>,bool> std::_Tree<std::_Tmap_traits<_Kty,_Ty,_P r,_Alloc,false>>::emplace<std:: pair<std::basic_string<char,std::char_tr aits<char>,std::allocator<char>>,int>>(s td:: pair<std::basic_string<char,std::char_tr aits<char>,std::allocator<char>>,int> &&)': cannot convert 'this' pointer from 'const std::map<std::string,int,Comp,std::alloc ator<std:: pair<const _Kty,_Ty>>>' to 'std::_Tree<std::_Tmap_traits<_Kty,_Ty,_ Pr,_Alloc,false>> &' with [ _Kty=std::string, _Ty=int, _Pr=Comp, _Alloc=std::allocator<std:: pair<const std::string,int>> ] and [ _Kty=std::string, _Ty=int ] and [ _Kty=std::string, _Ty=int, _Pr=Comp, _Alloc=std::allocator<std:: pair<const std::string,int>> ] карта data имеет вид:
0
|
|||||||||||||||||||||
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
||||
| 11.11.2018, 20:59 | ||||
const в методе означает, что этот метод не меняет содержимое объекта, что противоречит тому, что ты в этом методе делаешь.Добавлено через 3 минуты const бы не помешал.
0
|
||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
|
|||
| 11.11.2018, 21:50 | |||
|
Если вы гарантируете, что данные, которые вы меняете, не влияют на сортировку в set, то можете сделать вашу data mutable. Однако это в целом плохое решение, т.к. вынуждает в коде писать неинтуитивные вещи: метод добавляет нечто в объект, но сам он при этом const. Хорошего решения этой ситуации с использованием std::set нет. Можно использовать другие контейнеры, которые позволяют указывать что конкретно в объекте является ключом, освобождая остальную его часть от необходимости быть const (вроде boost::multi_index), или разбить свой класс на ключ и данные, и перейти на std::map.
2
|
|||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 11.11.2018, 22:04 | |
|
DrOffset,
В этом плане логика std::set мне не понятна Назвали значение ключом и сказали что ключи менять нельзя Да, можно удалить "ключ" и добавить новый, но что мешает позволить менять сам элемент? Реализацию нормальную не придумали поэтому и запретили?) Я просто логику понять не могу
0
|
|
|
Комп_Оратор)
|
||
| 11.11.2018, 22:51 | ||
|
0
|
||
| 11.11.2018, 22:51 | |
|
Помогаю со студенческими работами здесь
20
Перегруженный оператор () для std::set
STL std::set, std::pair, std::make_pair Как перегрузить методы, чтобы получились аналоги get set из C#
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|