Errore che non capisco

di il
2 risposte

Errore che non capisco

Salve a tutti. ho un problema con del codice che ho scritto nel simulatore...

in pratica nella classe header dichiaro un vector di struct in questo modo


vector <elementoSharing> loadReceived;
elemento sharing è inserita un file miscellaneous.h che includo nella seguente classe CentralAuthoriry (precedente) in questo modo

struct elementoSharing{
int enb;
double sharing;
};
ora nella classe Central.. .cc faccio :

void CentralAuthority::GetLoadEnbs(double load, int enbA){
	//1.
	struct elementoSharing temp;
	temp.enbAppartenente=enbA;
	temp.caricoENb=load;
	loadReceived.push_back(temp);
	m_count_load_received++;
	int carico1=0;
	int carico2=0;
	bool spostati=false;

	if(m_count_load_received==2){//ho ricevuto da entrabe gli enb il loro carico..
		struct elementoSharing tmp1=(struct elementoSharing)loadReceived.pop_back();
		struct elementoSharing tmp2=(struct elementoSharing)loadReceived.pop_back();
......
praticamente mi da errore quando faccio la pop_back su entrambe le chiamate e mi dice "invalid use of void expression"

potreste suggerirmi qualcosa per risolvere il problema....non capisco il motivo..
alla fine inserisco delle struct elementoSharing e poi le tolgo quando mi servono e faccio pure il cast ..
nn capisco grazie mille dell'aiuto

2 Risposte

  • Re: Errore che non capisco

    La pop_back() restituisce void non l'elemento che deve cancellare.
    Per fare questo devi usare un reverse_iterator o accedere tramite operator[] o il metodo at().
    Tra l'altro quella m_count_load_received++ può non servire in quanto il vector sa quanti elementi contiene ed essendo dato membro hai accesso sempre a tale informazione.
    Il codice potrebbe essere modificato così:
    
    if(loadReceived.size()==2){//ho ricevuto da entrabe gli enb il loro carico..
          struct elementoSharing tmp1= * (loadReceived.rbegin() );
          loadReceived.pop_back();
          struct elementoSharing tmp2= * (loadReceived.rbegin() );
          loadReceived.pop_back();
          ...
    
  • Re: Errore che non capisco

    shodan ha scritto:


    La pop_back() restituisce void non l'elemento che deve cancellare.
    Per fare questo devi usare un reverse_iterator o accedere tramite operator[] o il metodo at().
    Tra l'altro quella m_count_load_received++ può non servire in quanto il vector sa quanti elementi contiene ed essendo dato membro hai accesso sempre a tale informazione.
    Il codice potrebbe essere modificato così:
    
    if(loadReceived.size()==2){//ho ricevuto da entrabe gli enb il loro carico..
          struct elementoSharing tmp1= * (loadReceived.rbegin() );
          loadReceived.pop_back();
          struct elementoSharing tmp2= * (loadReceived.rbegin() );
          loadReceived.pop_back();
          ...
    

    ti ringrazio shodan.....funziona perfettamente come mi hai indicato...
    grazie 1000
Devi accedere o registrarti per scrivere nel forum
2 risposte