我想这样做:注册处方我创建了2个结构体:struct Presc
和struct 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);