Ich möchte eine Funktion, die ein Dokument in meinem Vertrag erstellt. Ich habe alles Unnötige entfernt. Geht so:
contract MyContract{
mapping (uint => document) documents;
struct document{
address author;
bytes32 hashedContent;
}
function addDocument(bytes32 docHash) public{
document newDoc = document (msg.sender,docHash); //*
[...]
}
}
Dokumente sind Strukturen, und ich möchte sie aus einer Funktion erstellen und dann dauerhaft zu einer Zuordnung hinzufügen. Ich habe einen Fehler in der //*
Zeile, die besagt:
MyContract.document memory is not implicitly convertible to expected type struct MyContract.document storage pointer. document newDoc = document (docHash,msg.sender); ^---------------------------------------------^
(von Remix) Der linke Teil ist Speicher, aber ich denke, der linke Teil ist Erinnerung.
Ist es möglich, das zu tun, was ich versuche?
Sie können einfach dies tun:
documents[whateverInt] = document(msg.sender,docHash);
Wenn Sie das Dokument unbedingt deklarieren müssen, bevor Sie es einstellen, müssen Sie Folgendes tun:
document memory newDoc = document(msg.sender,docHash);
documents[whateverInt] = (doc);
Andernfalls newDoc
wird standardmäßig ein Speicherzeiger verwendet, aber es document(msg.sender,docHash)
handelt sich um einen Wert und nicht um einen Zeiger.
Teleportierende Ziege
natewelch_
Teleportierende Ziege
TypeError: Member "push" not found or not visible after argument-dependent lookup in mapping(uint256 => address)
natewelch_