Loading...
Jovanna avatar Jovanna 186 Точки

обхождане на SET с обекти

Защо при обхождане на сет с обекти с итератор ( set<someObject>setData;   )

for (auto it = setData.begin(); it != setData.end(); it++)  {
                if ((*it).   )    / или   if ( it ->     не разпознава и не позволява да се изведат полетата на обекта, които са дефинирани в класа:

дефинирано поле в класа:  
    string getName() {
        return this->name;
    }

Тагове:
0
C++ Fundamentals
georgi.stef.georgiev avatar georgi.stef.georgiev 921 Точки

Така написан кодът ми изглежда вярно - стига someObject да е клас, който поддържа

bool operator<(const someObject& other) const { ....... } 

- ако не го поддържа, би следвало да имаш компилационна грешка на реда с декларацията на този set. Ако го поддържа би следвало спокойно да можеш да достъпваш членове на класа, стига да са public

string itemName = it->getName(); // ако getName() е public

Какви грешки получаваш? На кой ред точно ти дава грешка?

1
MartinPaunov avatar MartinPaunov 77 Точки

Здравей, ако може да дадеш един pastebin на кода, защото не мога да разбера точно въпроса ти.

1
Jovanna avatar Jovanna 186 Точки

имам  дефиниран bool operator<  

Не съм компилирала, защото е в червено кода  ред 83 85, 104 и 106 и не мога да извадя полетата, примерно на:

    if ((*it).   ) 

ето кода в pastebin  https://pastebin.com/W5mz2D9d

 

0
MartinPaunov avatar MartinPaunov 77 Точки

В кода предефенирания оператор беше' >', а не '<'. Смени го както след ключовата дума operator, така и при return.

Когато приемаш *it - дереференцирания итератор не приемаш самия обект, за да използваш самия обект и за да можеш да викаш методите в класа просто си направи временен обект който приема дереференцирания итератор и работи върху обекта, казано иначе.

Visitor currVisitor = *it; - така работиш върху обект, който е същия, като текущия и можеш да ползваш същите методи със същия резултат. Мисля, че след края на блока код в който е деклариран този обект ще се освободи от паметта.

След като промених двете неща в програмата ти тръгна без проблем, но ми изглежда, че не работи добре за command == "name".

Не съм сигурен пробвай и провери дали ще стане така. Също така не съм сигурен, че това е най-добрия начин за да се подкара кода, но така тръгна.

Поздрави.

1
Jovanna avatar Jovanna 186 Точки

Много благодаря! Успех утре!!

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.