Професионална програма
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