我正在一个 Solidity 项目中工作 - 我似乎无法为此找到解决方案:在结构中使用结构类型



我想这样做:注册处方我创建了2个结构体:struct Prescstruct Drug,我将在添加处方中使用,但当我创建函数addPrescription时它不起作用。

错误是在addDrugs函数调用:

addDrugs( _id,Drug[_id].name,Drug[_id].Qtt); // TypeError: Integer constant expected
pragma solidity ^0.8.0;
contract Pharm {
struct Presc {
uint id;
uint ref;
uint nbOfDrugs;
string Pname;
Drug[] drugs; 
}
struct Drug {
uint id; 
string name;
uint Qtt;
}
Drug[] drugss;
mapping(uint=> Presc) public mapPresc;
mapping(uint=> Drug) public mapDrug;

function addDrugs(uint _id, string memory _name, uint _Qtt) public { 
_id=1;
Drug storage drgs= mapDrug[_id];
drgs.id=_id;
drgs.name=_name;
drgs.Qtt=_Qtt;
_id++;
}
function addPresc(uint _ref, uint _nbOfDrugs, string memory _Pname, Drug memory _list) public { 
uint _id = 1;
Presc storage presc = mapPresc[_id];
for(_id=1; _id <= _nbOfDrugs; _id++){
addDrugs(_id, Drug[_id].name, Drug[_id].Qtt);
}
presc.id=_id; 
presc.ref=_ref;
presc.nbOfDrugs=_nbOfDrugs;
presc.Pname=_Pname;
}
}

您正在尝试访问Drug类型结构体的索引。

根据代码的上下文,您可能希望访问drugss变量(即Drug类型)。

addDrugs(_id, drugss[_id].name, drugss[_id].Qtt);

相关内容