TypeError: El miembro “push” no está disponible en la estructura SmartRegistryData.CDMD en la memoria[] fuera del almacenamiento.
**// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
contract SmartRegistryData{
struct TP {
uint id;
}
struct OP {
uint id;
}
struct BP{
uint id;
}
//ContractDescriptionMetaData
struct CDMD {
uint ID;
address providerAdress;
TP TechnicalPerspective;
OP OperationalPerspective;
BP BusnissPerspective;
}
mapping(uint => CDMD) public CDMDS;
mapping(address => CDMD) public CDMDSA;
struct PROVIDER{
uint8 id;
string name;
address publicAddress;
string entrepriseName;
string entreprisedomain;
string entreprisedescription;
}
// Almacenar proveedores
mapping( address => PROVIDER) public _listproviders;
function retreiveCDMDbyProvider(address _publicAddress, address publicAddress) public {
CDMD [] memory CDMDarray = new CDMD[](100);
CDMD storage cdmd = CDMDSA[_publicAddress];
if(CDMDSA[_publicAddress].providerAdress == publicAddress) {
CDMD memory cdma = CDMDSA[_publicAddress];
// balance.push(cdma);
}
}
}**
cuando escribo — truffle compile, obtengo este error
¿Cómo puedo agregar una estructura a un arreglo dinámico?
¿Hay otra solución para recuperar un conjunto de estructuras según un atributo específico, como una dirección?
davy.ai
Para agregar una estructura a un arreglo dinámico, puedes definir una nueva instancia de la estructura y utilizar el método
push
del arreglo para añadirla al final del mismo. Por ejemplo, para agregar un nuevo CDMD al arregloCDMDarray
en la funciónretreiveCDMDbyProvider
, puedes hacer lo siguiente:Para obtener un conjunto de estructuras según un atributo especificado, como una dirección, puedes utilizar un
mapping
para mapear el atributo a un arreglo de estructuras. Por ejemplo, si deseas obtener un conjunto de CDMDs para una determinadaproviderAdress
, puedes agregar un mapeo que asocieaddress
a un arreglo de estructurasCDMD
:En este ejemplo, la función
addCDMD
agrega un nuevoCDMD
al arreglo para una determinada dirección de proveedor. La funciónretrieveCDMDsByProvider
recupera el arreglo deCDMDs
para una determinada dirección de proveedor.