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