Объект массива со ссылками не возвращает переменную класса при итерации - завершается вызовом после выброса экземпляра 'std :: logic_error' - PullRequest
0 голосов
/ 07 мая 2019

Итак, я пытаюсь перебрать динамический массив (обязательно) класса «Candidate», который имеет getter «getVotes ()» для того, чтобы получить голоса для сопоставления с «totalVotes ()» для возвратаобщее количество голосов и вернуть% от общего числа голосов, которые получает кандидат.

Однако, когда программа выполняется, она правильно выводит общее количество голосов, кандидатов и их голосов, но не вычисляет процент от общего числа голосов.

https://imgur.com/a/yJsBr5f

Также выдается исключение: «Завершается вызов после выброса экземпляра 'std :: logic_error' what (): basic_string :: _ M_construct, недопустимый

, и время от времени общее количество распечатанных голосов простономер мусора, который может быть программой, добавляющей адреса?

https://imgur.com/a/c4kyT11

Я попытался поставить cout, чтобы увидеть, добавляется ли число в функцию "totalVotes", но ничегораспечатывает.

Я знаю, что "getVotes ()" работает, потому что он все еще перечисляет правильное количество голосов.

class Candidate
{
    int Votes;
//...
    Candidate(string, int);
//...
    int getVotes() {return Votes;}
    void setVotes(int votes){Votes = votes;}
};

//return total votes 
int totalVotes(Candidate *x) 
{
    int total = 0;
    for(int i = 0; i < (int)sizeof(x); i++)
    {
        total = total + x[i].getVotes();
    }
    return total;
}
//main
int main(int argc, char **argv)
{
    int noc;
    int voteTotal;
    cout << "Declare the number of candidates: ";
    cin >> noc;
    Candidate* candidates = new Candidate[noc+1];

    //get list of candidates
    for(int i = 0; i<noc; i++)
    {
        string name;
        int votes;
        cout << "Name for candidate " << i+1 << "?: ";
        cin >> name;
        cout << "How many votes did they get?: ";
        cin >> votes;
        candidates[i].setName(name);
        candidates[i].setVotes(votes);
    }

    //get total votes from candidates
    voteTotal = totalVotes(candidates); 
    cout << "Total Votes: " << voteTotal << endl;

    cout << setw(20) << "Candidate" <<
            setw(20) << "Votes Received" <<
            setw(20) << "% of Total Votes" << '\n';

    //return list of candidates (Why does this work and not "totalVotes()"?)
    for(int i = 0; i<(int)sizeof(candidates)-1; i++) 
    {
        cout << setw(20) << candidates[i].getName() <<
                setw(20) << candidates[i].getVotes() <<
                setw(20) << setprecision(2) << (candidates[i].getVotes()/voteTotal)*100 << "%\n";
    }

    return 0;    
}

Таким образом, программа аварийно завершает работу сразу после того, как кандидатыв списке вместе с печатью пустой строки.

Я не уверен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...