pragma solidity ^0.4.17;
contract hoteltranscation {
struct hotel{
string HotelName;
uint256 BookingNumber;
}
function HotelBooking(string _HotelName,uint256 _BookingNumber ) public {
hotel storage addtrascation = hotel (_HotelName,_BookingNumber);
}
}
Ich habe eine Struktur als öffentliche Variable deklariert und möchte sie als Speichervariable in einer Funktion verwenden
2) Ich erhalte die folgende Fehlermeldung
':12:6: TypeError: Type struct hoteltranscation.hotel memory is not implicitly convertible to expected type struct hoteltranscation.hotel storage pointer.\n hotel storage addtrascation = hotel (_HotelName,_BookingNumber);\
3) Ich möchte die Zustandsvariablen als Speichervariablen machen und einige Daten speichern
Wenn Sie im Dunkeln tappen, was Sie hier zu tun versuchen, können Sie Ihre Frage gerne aktualisieren, und ich kann meine Antwort entweder entfernen oder aktualisieren.
Es sieht so aus, als ob Sie die Werte einer Struktur eingeben hotel
und diese dann irgendwo dauerhaft speichern möchten, möglicherweise in einer Reihe von Hotelbuchungen.
Das kannst du so machen:
pragma solidity ^0.4.17;
contract hoteltranscation {
struct hotel{
string HotelName;
uint256 BookingNumber;
}
hotel[] HotelBookings;
function HotelBooking(string _HotelName, uint256 _BookingNumber) public {
HotelBookings.push(hotel (_HotelName, _BookingNumber));
}
function GetHotelBooking(uint _num) public view returns(string, uint256) {
return (HotelBookings[_num].HotelName, HotelBookings[_num].BookingNumber);
}
}
Hier muss man nicht zu schick werden. Wenn Sie aus irgendeinem Grund eine temporäre Variable verwenden müssen, bevor Sie in das globale Array pushen, wäre dies eine perfekte Verwendung einer Speichervariablen:
pragma solidity ^0.4.17;
contract hoteltranscation {
struct hotel{
string HotelName;
uint256 BookingNumber;
}
hotel[] HotelBookings;
function HotelBooking(string _HotelName, uint256 _BookingNumber) public {
hotel memory tempHotel = hotel (_HotelName, _BookingNumber);
// Do some logic
HotelBookings.push(tempHotel);
}
function GetHotelBooking(uint _num) public view returns(string, uint256) {
return (HotelBookings[_num].HotelName, HotelBookings[_num].BookingNumber);
}
}
Hilft das?
hotel SingleHotelBooking;
) speichern, aber es ist wahrscheinlich sinnvoll, ihn in den "Vertragskontext" zu stellen, damit er im Vertrag gespeichert und von anderen Funktionen aus zugänglich ist. Vielleicht lesen Sie dies für weitere Details zum Schlüsselwort memory
and storage
.storage cannot be newly created in a function. Any storage referenced variable in a function always refers a piece of data pre-allocated on the contract storage (state variable). Any mutation persists after function call.
md venkatesh