У меня есть два разных файла: Project1.sol и Project2.sol.
Project2.sol похож на:
import "./Project1.sol";
contract Project2{
address newProject1Address =address(new Project1());
}
Project1.sol похож на:
import "./Project2.sol";
contract Project1 is Project2{
}
Я развернул Project1 внутри файла Project2.sol. А также я использовал структуру, которая находится в Project2 из файла Project1.sol.
Я получил ошибку: определение базы должно предшествовать определению производного контракта. для этой строки: contract Project1 is Project2{
После того, как я проверил ошибку в Интернете, были решения для двух контрактов и одного файла. Однако у меня было два файла.
Я объединил эти два контракта в файл.
Вот что я сделал:
pragma solidity >=0.7.0 <0.9.0;
contract Project2{
Apple[] public applepies;
struct Apple{
string name;
mapping (address => bool) applepie;
}
function createProject() external{
address newProject1Address =address(new Project1(msg.sender));
uint idx = applepies.length;
applepies.push();
Apple storage newProject = applepies[idx];
}
}
contract Project1 is Project2{
address public creator;
constructor (address creator1){
creator= creator1;
}
function getDetails(uint index) public{
Apple storage newv= applepies[index];
//require(newv.applepie = msg.sender);
}
}
Тогда я не смог развернуть Project1 из Project2. Когда я это делаю, это ошибка, которую я получил, циклическая ссылка для создания контракта (невозможно создать экземпляр производного или того же контракта) в этой части address newProject1Address =address(new Project1());
Что я должен делать? Ваши предложения?
function createProject{
выдает синтаксическую ошибку. Это действительно либо в какой-то очень старой версии, либо вы неправильно скопировали скобку (старая версия Solidity) и модификатор видимости (public
,external
, ...). Вы тоже можете это исправить? - person Petr Hejda   schedule 04.05.2021