Ошибка объявления: Идентификатор не найден или не уникален. отображение(uint => продукт) общедоступных продуктов;

#ethereum #solidity #smartcontracts

Вопрос:

ниже приведен мой код, я не уверен, зачем выдавать мне эту ошибку.

 // SPDX-License-Identifier: MIT
pragma solidity ^0.5.16;

// creating the contract
contract Rating {
    
    // creating structure to model the product
    struct Product {
        uint id;
        string name;
        uint RatingCount;
    }

    // use mapping to get or fetch the contestant details
    mapping(uint => product) public products;

    // add a public state variable to keep track of product count
    uint public productsCount;

    constructor () public {
        addProduct("Nike");
        addProduct("Adidas");
    }

    // add a function to add product
    // for private variable we use underscore in the start of variable _name
    function addProduct(string memory _name) private {
        productsCount  ;
        products[productsCount] = Product(productsCount, _name, 0);
    }

}
 

Ответ №1:

Солидность чувствительна к регистру.

Вы определили структуру с именем Product (в верхнем регистре P), но в вашем отображении используется product (в нижнем регистре p).

Решение: Используйте правильную форму Product

 mapping(uint => Product) public products;
 

Ответ №2:

извините, я нашел ответ, проблема в отображении

 mapping(uint => product) public products;
 

Я ошибочно использую small p вместо capital P. Это приводит к ошибке при переносе моего смарт-контракта, потому что имя моей структуры начинается с Capital P (Продукт).
поэтому вместо маленького p просто измените p на P.

 mapping(uint => Product) public products;