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);
}
}
Я объявил структуру общедоступной переменной и хочу использовать ее как переменную хранения внутри функции.
2) Я получаю следующую ошибку
':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) Я хочу сделать переменные состояния переменными хранения и хранить некоторые данные
Пытаясь разобраться в том, что вы пытаетесь здесь сделать, не стесняйтесь обновлять свой вопрос, и я могу либо удалить свой ответ, либо обновить его.
Похоже, вы хотите ввести значения структуры hotel
, а затем сохранить их где-нибудь на постоянной основе, например, в массиве бронирований отелей.
Вы можете сделать это следующим образом:
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);
}
}
Здесь не нужно слишком заморачиваться. Если по какой-то причине вам нужно использовать временную переменную перед отправкой в глобальный массив, это было бы идеальным использованием переменной памяти:
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);
}
}
Это помогает?
hotel SingleHotelBooking;
), но, вероятно, имеет смысл поместить его в «контекст контракта», чтобы оно сохранялось в контракте и было доступно из других функций. Возможно, прочитайте это для получения более подробной информации о ключевом слове 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.
МД Венкатеш