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);
Благодаря предварително за помоща :)
Това е "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
Здрасти, вижда се от грешката че си декларирал един път че ще подадеш на функцията const Voter обект, а после искаш да му подадеш референция към обекта. За това гърми. Когато работиш с пойнтъри не трябва да подаваш референция към пойнтъра а да кажеш пойнтър2 ще сочи към същото към което сочи пойнтър1, което е равносилно на
пойнтър2 = пойнтър1. Или с две думи не използвай референция към пойнтър.
Това е част от моето дано разбереш какво имам предвид.
След дълго преглеждане на различни примери най-сетне разбрах какъв е проблема. След get метода voterVote() е необходимо да се постави ключовата дума const, за да покажеш на компилатора че твоя метод не прави промени в членовете на обекта.
Ето тук е обяснено много добре :)
http://stackoverflow.com/questions/12068301/c-error-c2662-cannot-convert-this-pointer-from-const-type-to-type