Type-Casting
不允許從“uint256”到“int32”的顯式類型轉換
我在使用最新的 solc (
0.8.10
) 版本時遇到以下錯誤,這在solc versiona 0.7.*
CompilerError: solc returned the following errors: TypeError: Explicit type conversion not allowed from "uint256" to "int32". --> contracts/contract.sol:248:26: | 248 | int32 core = int32(core); | ^^^^^^^^^^^
有可能修復它嗎?
根據0.8.0 更新日誌:
顯式類型轉換有新的限制。僅當符號、寬度或類型類別(int、地址、bytesNN 等)最多有一次更改時才允許轉換。要執行多項更改,請使用多次轉換。
core
是類型uint256
,將其轉換為int32
您確實是:
- 改變符號(從無符號到有符號)
- 改變寬度(從 256 到 32)
重寫您的轉換以適應多次轉換建議:
int32 core = int32(int256(core));
另一方面,
int32 core
陰影uint256 core
幾乎總是一種不好的做法。請注意顯式類型轉換行為(截斷和符號解釋),確保您提供的值在正確轉換的範圍內。