Солидность - ошибка: идентификатор не найден или не уникален. Ошибка компиляции - PullRequest
0 голосов
/ 17 октября 2019

Я пытался скомпилировать этот код с помощью версии компилятора 0.5.12, но у меня возникла исключительная ситуация:

browser / Untitled.sol: 21: 24: StatementError: Идентификатор не найден или не уникален.

функция getRoleOf (адресная реклама) публичные возвращает (строка txt) {

^ ---- ^

Мой код:

pragma solidity >=0.4.22 <0.5.13;
contract Max{
    mapping(address => uint256) private balaces;
    mapping(address => role) private roles;
    enum role{
        Admin,
        Manager,
        User
    }

    constructor() public{
        balaces[msg.sender] = 1000;
        roles[msg.sender] = role.Admin;
    }

    function getRoleOf(adress ad) public returns(string txt){
        if(roles[ad] == role.User){
            txt = "User";
            return;
        }
        if(roles[ad] == role.Manager){
            txt = "Manager";
            return;
        }
        if(roles[ad] == role.Admin){
            txt = "Admin";
            return;
        }
        return "Нет такого пользователя";
    }
}

Что не так в моем коде?

Ответы [ 2 ]

1 голос
/ 18 октября 2019

Приведенный выше ответ (@abcoathup) работает с 0.4.26, если вы хотите выполнить свой код в версии с надежностью 0.5.12, проверьте следующий код (с незначительной оптимизацией)

pragma solidity >=0.4.22 <0.5.13;
contract Max{
    mapping(address => uint256) private balaces;
    mapping(address => role) private roles;
    enum role{
        Admin,
        Manager,
        User
    }

    constructor() public{
        balaces[msg.sender] = 1000;
        roles[msg.sender] = role.Admin;
    }

    function getRoleOf(address ad) public returns(string memory txt){
        txt = "Нет такого пользователя";
        if(roles[ad] == role.User){
            txt = "User";
        } else if(roles[ad] == role.Manager){
            txt = "Manager";
        } else if(roles[ad] == role.Admin){
            txt = "Admin";
        }
        return txt;
    }
}
0 голосов
/ 18 октября 2019

Существует опечатка в: function getRoleOf(adress ad) adress должно быть address

Следующие компиляции в Remix с использованием Solidity Compiler 0.4.26

pragma solidity >=0.4.22 <0.5.13;
contract Max{
    mapping(address => uint256) private balaces;
    mapping(address => role) private roles;
    enum role{
        Admin,
        Manager,
        User
    }

    constructor() public{
        balaces[msg.sender] = 1000;
        roles[msg.sender] = role.Admin;
    }

    function getRoleOf(address ad) public returns(string txt){
        if(roles[ad] == role.User){
            txt = "User";
            return;
        }
        if(roles[ad] == role.Manager){
            txt = "Manager";
            return;
        }
        if(roles[ad] == role.Admin){
            txt = "Admin";
            return;
        }
        return "Нет такого пользователя";
    }
}
...