Ошибка компиляции Внутренняя ошибка компилятора: слишком глубокий стек, попробуйте использовать меньше переменных - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь составить нижеуказанный контракт и получаю сообщение об ошибке.Если я удаляю отображение, я не получаю сообщение об ошибке: Компиляция с использованием компилятора по умолчанию, версия Solidness: 0.4.24 + commit.e67f0147.Emscripten.clang InternalCompilerError: Слишком большой стек, попробуйте использовать меньше переменных.контракт:

 contract MasterContract{

struct Person
{

    uint Id;        
    string FirstName;
    string LastName;
    string FathersName;
    string HomeAdress;        
    string PhoneNumber;      
    string Username;
    string PersonalEmail;


}

mapping(uint => Person) public person;

uint public personsCount;

function addPerson( string _FirstName, string _LastName,  string _FathersName, string _HomeAdress,  string _PhoneNumber,  string _Username, string _PersonalEmail )
 private {
    personsCount ++;
    persons_fn[patientsCount]=Patient(patientsCount, _FirstName, _LastName, _FathersName, _HomeAdress,  _PhoneNumber, _Username, _PersonalEmail);
}


}

1 Ответ

0 голосов
/ 22 октября 2018

Я не вижу ошибки, которая возникает у вас, когда я пытаюсь ее скомпилировать.Однако мне пришлось изменить persons_fn на person и patientsCount на personsCount, так как они не были объявлены.

Я думаю, что вы просто провели некоторый рефакторинг и забыли изменить их.

В противном случае код успешно компилируется в Remix с 0.4.24+commit.e67f0147.Emscripten.clang

Вот фиксированный код:

pragma solidity ^0.4.24;

contract MasterContract{

struct Person
{
    uint Id;        
    string FirstName;
    string LastName;
    string FathersName;
    string HomeAdress;        
    string PhoneNumber;      
    string Username;
    string PersonalEmail;
}

mapping(uint => Person) public person;

uint public personsCount;

function addPerson( string _FirstName, string _LastName,  string _FathersName, string _HomeAdress,  string _PhoneNumber,  string _Username, string _PersonalEmail )
 private {
    personsCount ++;
    person[personsCount]=Person(personsCount, _FirstName, _LastName, _FathersName, _HomeAdress,  _PhoneNumber, _Username, _PersonalEmail);
}


}

Если вы хотите узнать больше о Солидности и умных контрактах, ознакомьтесь смой курс, который я специально сделал для этого - Интеллектуальные контракты Solidity: создание Dapps в блокчейне Ethereum

Вот купон на скидку: QAUS8657

...