'Solidity-Type address not convertible to type uint256

I created an array of structures and then tried to get the values of each account of an array. But I failed with an array while passing the address variable which contains msg.sender and the type is not visibly convertible to uint256. How can I do it?



Solution 1:[1]

As of Solidity v0.8, you can no longer cast explicitly from address to uint256.

You can now use:

uint256 i = uint256(uint160(address(msg.sender)));
function f(address a) internal pure returns (uint256) {
  return uint256(uint160(a));
}

Solution 2:[2]

You can cast it explicitly:

uint256 i = uint256(msg.sender);

function f(address a) constant returns (uint256) {
    return uint256(a);
}

Solution 3:[3]

Pre v0.8.0 of Solidity you could do:

pragma <0.8.0;

return address(toUint(item));

Post v0.8.0 of Solidity you must now do:

pragma ^0.8.0

return address(uint160(toUint(item)));
  • References

address(uint) and uint(address): converting both type-category and width. Replace this by address(uint160(uint) and uint(uint160(address)) respectively.

see v0.8.0 breaking changes, Solidity Documentation

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 cfly24
Solution 2 Zvezdomir Zlatinov
Solution 3 Sam Bacha