Связанный список - проблема с получением временного адреса - PullRequest
0 голосов
/ 28 марта 2020

У меня проблема с упражнениями. Я должен написать функцию, которая возвращает всех президентов с кратчайшим сроком полномочий. В моем файле "presidents.txt" я вижу, что есть 3 президента, которые правили только один год. Я могу написать забаву, которая возвращает только одного президента, поэтому я пытаюсь использовать связанный список, чтобы вернуть еще несколько. К сожалению, когда я пытаюсь скомпилировать свой код, я вижу ошибку «получение адреса временного [-fpermissive]».

lista_2 = &shortest_time(lista);

Специально для этой строки. Извините за мой Engli sh и другие ошибки. Я знаю, что все это, вероятно, беспорядок.

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <bits/stdc++.h>

using namespace std;

struct node
{
     string name;
     string surname;
     int start_date;
     int end_date;
     string faction;
     node *next;
};



void add_back(node *&head, string n,
           string sn, int st,
           int en, string fa)             
{
     node *pom = head;
     node *tmp = new node;

     tmp->name = n;
     tmp->surname = sn;
     tmp->start_date = st;
     tmp->end_date = en;
     tmp->faction = fa;

     tmp->next = NULL;
     if (head)
     {
         while (pom->next != NULL)
         {
             pom = pom->next;
         }
         pom->next = tmp;
     }
     else
     {
         head = tmp;
     }
}

void show(node *&head)                      
{
     node *tmp = head;
     while (tmp)
     {
         cout << tmp->name << endl;
         cout << tmp->surname << endl;
         cout << tmp->start_date << endl;
         cout << tmp->end_date << endl;
         cout << tmp->faction << endl;
         cout << endl;
         tmp = tmp->next;
     }
}


 struct linked
 {
     string surn;
     linked  *next;
 };

 void add_linked_first(linked *&head, string n)
 {
     linked *pom = head;
     linked *tmp = new linked;

     tmp->surn = n;
     tmp->next = head;
     head = tmp;
 }

 void show_linked(linked *&head)
 {
     linked *tmp = head;
     while (tmp)
     {
         cout << tmp->surn << endl;
         cout << endl;
         tmp = tmp->next;
     }     
 }

 linked shortest_time(node *&head)                       
 {
     linked *list_1 = new linked;
     list_1 = NULL;                                                  


     string n;
     node *tmp = head;
     int mini = INT_MAX;
     while(tmp)
     {
         if((tmp->end_date - tmp->start_date) < mini)
         {
             mini = (tmp->end_date - tmp->start_date);
             //  nick = tmp->name + " " + tmp->surname;
             n = tmp->surname;
             add_linked_first(list_1,n);
         }
         tmp = tmp->next;
     }
     return *list_1;
 }




 int main()
 {
     node *lista = new node;
     lista = NULL;


     string buffer;
     fstream file("presidents.txt", std::ios::in);

     while(!file.eof())
     {
         string name;
         string surname;
         int start_date;
         int end_date;
         string faction;

         for (int i = 0; i <= 4; i++)
         {
             file >> buffer;

             if (i == 2)
             if (isdigit(buffer[0]))
                i++;

             switch (i)
             {
                 case 0:
                     name = buffer;
                     break;

                 case 1:
                     surname = buffer;
                     break;

                 case 2:
                     surname += " " + buffer;
                     break;

                 case 3:
                 {
                     string st = buffer.substr(0,4);
                     string en = buffer.substr(5,4);
                     start_date = stoi(st);
                     end_date = stoi(en);
                     break;
                 }

                 case 4:
                     faction = buffer;
                     break;
             }
         }
         add_back(lista, name, surname, start_date, end_date, faction);
     }

linked *lista_2 = &shortest_time(lista);
cout <<  lista_2->surn;

return 0;

}

...