Loading...
lucky_9 avatar lucky_9 14 Точки

Homework 6 Brexit

Здравейте моля за малко разяснения относно няколко неща.

1. Опитвам се да подавам като параметър на функция set<myObject>. Подавам го по рефенция на функцията и добавям const , защото няма да променям стойностите в сета.  С итератор вътре във функцията обхождам сет-а но ми дава грешка.

2. Възможно ли е функцията да връща map, удачно ли е или е по добре да връща нещо като итератор към map.

#include "Collector.h"
#include <set>
using namespace std;

map<string, int> Collector::resultsInNumbers(const set<Voter> &voters)
{
    int countYes = 0;
    int allVoters = voters.size();

    for (set<Voter>::iterator it = voters.begin(); it != voters.end(); it++)
    {
        if (it->voterVote() == yes) //yes is defined as enum type "vote"
        {
            countYes++;
        }
    }

    map<string, int> result;
    result.insert(pair<string, int>("yes", countYes));
    result.insert(pair<string, int>("no", abs(allVoters - countYes)));
}

3. Защо когато подаваш обект по рефевренция на функция const се поставя преди типа , а в примерите които разглеждам със set подаден като параметър на функция е след типа.

function( const Type &object);

function (set<type1, type2> const &setName);

Благодаря предварително за помоща :)

Тагове:
0
C++ Programming
fl3x1324 avatar fl3x1324 60 Точки

Здрасти! А може ли да видим грешката на компилатора?

По точка 3, мисля че бъркаш set<> с map<>. До колкото си спомням set<type> колекционира само един тип данни, но не може да има повтарящи се стойности.

Къде е #include-нат <map>, в "Collector.h"?

 

Поздрави, Атанас Минков!

0
12/07/2016 11:32:55
lucky_9 avatar lucky_9 14 Точки

Това е "Collector.h"

#include <string>
#include <map>
#include <set>
#include "Voter.h"

using namespace std;

#ifndef __COLLECTOR_H_
#define __COLLECTOR_H_

class Collector
{
private:

public:
    map<string, int> resultsInPercents(set<Voter> const &setVoters);
    map<string, int> resultsInNumbers(set<Voter> const &setVoters);
    map<string, int> resultStatisticByAge(set<Voter> const &setVoters);

    const string key = "12344321";
};
#endif // !__Collector_H_

Това са грешките:


Error    C2662    'vote Voter::voterVote(void)': cannot convert 'this' pointer from 'const Voter' to 'Voter &'    Brexit    c++course\homeworks\06.homework\brexit\brexit\collector.cpp    14   


Error (active)        the object has type qualifiers that are not compatible with the member function "Voter::voterVote"    Brexit    SoftUni\C++Course\Homeworks\06.Homework\Brexit\Brexit\Collector.cpp    14    

 

 

 

0
12/07/2016 12:58:09
fl3x1324 avatar fl3x1324 60 Точки

cannot convert 'this' pointer from 'const Voter' to 'Voter &' 

Здрасти, вижда се от грешката че си декларирал един път че ще подадеш на функцията const Voter обект, а после искаш да му подадеш референция към обекта. За това гърми. Когато работиш с пойнтъри не трябва да подаваш референция към пойнтъра а да кажеш пойнтър2 ще сочи към същото към което сочи пойнтър1, което е равносилно на

пойнтър2 = пойнтър1. Или с две думи не използвай референция към пойнтър.

 

Това е част от моето дано разбереш какво имам предвид.

std::shared_ptr<Voter> aVoter(new Voter(newAge, newName, newGender, newLocation, newEthnos, newVоte));
votes.insert(std::pair<unsigned int, std::shared_ptr<Voter>>(newUCN, aVoter));

 

0
12/07/2016 14:23:19
lucky_9 avatar lucky_9 14 Точки

След дълго преглеждане на различни примери най-сетне разбрах какъв е проблема. След get метода voterVote() е необходимо да се постави ключовата дума const, за да покажеш на компилатора че твоя метод не прави промени в членовете на обекта.

Ето тук е обяснено много добре :)

http://stackoverflow.com/questions/12068301/c-error-c2662-cannot-convert-this-pointer-from-const-type-to-type

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