2016-06-16 5 views
9
struct buyer{ 
     uint amount; 
     Status status; 
    } 

    mapping(address=>buyer) public buyers; 
    mapping(uint=>address) buyerIndex; 
    uint public buyerNum; 
    //Order a product. 
    function(){ 
     uint doubleValue=value*2; 
     uint amount=msg.value/doubleValue; 
     if(buyers[msg.sender]==null){ //Error in this line 
     buyer abuyer=buyer({amount:amount,status:Status.Created}); //Error in this line 
     buyerNum++; 
     buyerIndex[buyerNum]=msg.sender; 
     buyers[msg.sender]=abuyer; 
    }else{ 
     buyers[msg.sender].amount+=amount; 
    } 
     Order(msg.sender,amount*doubleValue,amount); 

} 

バイヤーがバイヤーマッピングで記録されていない場合、buyerNum ++; しかし、買い手がマッピングに含まれているかどうかを知る方法はありません固体でヌルのようなものがありますか

+0

たぶんのような([変数や配列が設定されている場合、または私がチェックすることができますどのように空またはnull] http://ethereum.stackexchange.com/a/2134/87)、[構造体のゼロ値のチェック](http://ethereum.stackexchange.com/q/2502/87)、[文字列のゼロ値は何ですか](http:// ethereum。 stackexchange.com/q/5683/87)、Ethereum Stack Exchangeで? – default

答えて

4

隙間のないようにはnullのようなものはありません。

ただアドレスの長さをチェック:

if(buyers[msg.sender].length == 0){ 
    // do your thing 
} 

this answer on ethereum stack exchange参照してください。あなたがNULLとしてそれを使用することなし変数を作成することができ

3

uint80 constant None = uint80(0); 
2

は堅実で、すべての変数は、デフォルトでは0に設定されています。

mappings可能な限りの組み合わせはデフォルトで0に設定されています。あなたの特定のケースで

私が使用し、次の

if (buyers[msg.sender].amount == 0) 
関連する問題