2017-03-14 1 views
0

Je ne peux pas utiliser (push) car il est utilisé avec la variable d'état neAjouter un élément à struct

Ceci est l'erreur:

Error message

Y at-il des solutions de rechange pour (push)

contract m{ 


    struct Message{ 

    address sender; 
    address receiver; 
    uint msgContent; 

       } // end struct 

Message[] all; 

function get (address from) internal 
             returns (Message[] subMsgs){ 


    for (uint i=0; i<all.length ; i++) 

     { 
     if (all[i].sender == from) 
      { 
       subMsgs.push (all[i]); 
      } 
     } 


      return subMsgs; 
      } 
     } // end contract 

Répondre

2

Vous ne pouvez utiliser push sur les tableaux de taille dynamique (par exemple baies de stockage), et non pas des tableaux de taille fixe (par exemple des réseaux de mémoire) (voir Solidity array documentation pour plus d'informations). Pour obtenir ce que vous voulez, vous devez créer une matrice de mémoire avec la taille désirée et affecter chaque élément un par un. Voici l'exemple de code:

contract m { 

    struct Message{ 
     address sender; 
     address receiver; 
     uint msgContent;    
    } // end struct 

    Message[] all; 

    function get(address from) internal returns (Message[]) { 

     // Note: this might create an array that has more elements than needed 
     // if you want to optimize this, you'll need to loop through the `all` array 
     // to find out how many elements from the sender, and then construct the subMsg 
     // with the correct size 
     Message[] memory subMsgs = new Message[](all.length); 
     uint count = 0; 
     for (uint i=0; i<all.length ; i++) 
     { 
      if (all[i].sender == from) 
      { 
       subMsgs[count] = all[i]; 
       count++; 
      } 
     } 
     return subMsgs; 
    } 
} // end contract