Compilation failed Internal Compiler Error: Stack too deep, try using fewer variables

Compilation failed Internal Compiler Error: Stack too deep, try using fewer variables

我正在尝试编译波纹管合约,但出现错误。如果我删除映射,我不会收到错误消息: 使用默认编译器编译,solidity版本: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);
}


}

我在尝试编译时没有看到您遇到的错误。但是,我不得不将 persons_fn 更改为 person,将 patientsCount 更改为 personsCount,因为它们没有声明。

我想你只是做了一些重构而忘了更改它们。

否则代码在 0.4.24+commit.e67f0147.Emscripten.clang

的 Remix 中编译成功

固定代码如下:

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);
}
    
    
}