2017-03-14 1 views
12

Das Problem tritt auf, wenn ich testen möchte, ob ein Zeichenfolgewert korrekt ist. Zahlen werden korrekt angegeben und geben keine Fehlermeldung zurück, wenn sie versucht werden, zu kompilieren. Allerdings, wenn ich versuche, eine Zeichenfolge zu behaupten, es gibt die folgende Fehlermeldung:Mitglied gleich ist nicht verfügbar in Typ (Bibliothek Assert)

Error: Member "equal" is not available in type(library Assert) outside of storage. 
     Assert.equal(token.symbol(), "$", "The symbol of the token should be $"); 
     ^----------^ 
Compiliation failed. See above. 

Token.sol

pragma solidity ^0.4.8; 

contract Token { 
    /* The amount of tokens a person will get for 1 ETH */ 
    uint256 public exchangeRate; 

    /* The name of the token */ 
    string public name; 

    /* The address which controls the token */ 
    address public owner; 

    /* The symbol of the token */ 
    string public symbol; 

    /* The balances of all registered addresses */ 
    mapping (address => uint256) balances; 

    /* Token constructor */ 
    function Token(uint256 _exchangeRate, string _name, string _symbol) { 
     exchangeRate = _exchangeRate; 
     name = _name; 
     owner = msg.sender; 
     symbol = _symbol; 
    } 

    function getBalance(address account) returns (uint256 balance) { 
     return balances[account]; 
    } 
} 

TestToken.sol

pragma solidity ^0.4.8; 

// Framework libraries 
import "truffle/Assert.sol"; 
import "truffle/DeployedAddresses.sol"; 

// Custom libraries and contracts 
import "../contracts/Token.sol"; 

contract TestToken { 
    function testExchangeRate() { 
     Token token = new Token(500, "Dollar", "$"); 

     uint256 expected = 500; 

     Assert.equal(token.exchangeRate(), expected, "The exchange rate should be 500 tokens for 1 ETH"); 
    } 

    function testSymbol() { 
     Token token = new Token(500, "Dollar", "$"); 

     Assert.equal(token.symbol(), "$", "The symbol of the token should be $"); 
    } 
} 

Warum es passiert und wie löst man es?

+0

Vielleicht könnte das helfen? http://ethereum.stackexchange.com/q/1701 – default

+2

Alle Neuigkeiten zu diesem Thema? –

Antwort

-3

Versuchen Sie, den Typ von string zu einem anderen, sagen wir bytes32. Es klappt.

Alles Gute.

1

Ab sofort unterstützt Solidität nicht die Rückgabe von Strings zwischen Verträgen. Da die Länge einer Zeichenfolge zum Zeitpunkt des Anrufs nicht bekannt ist. Sie unterstützen also nur Arryas mit fester Größe wie bytes32.

Sie können mehrere Bytes32 haben, um verschiedene Teile Ihrer Zeichenfolge zu speichern.