TypeError al compilar para el mapeo público de la dirección ==> uint?

Tal vez esto sea realmente obvio, pero por alguna razón no puedo evitar este error. Al compilar me sale el siguiente error:

TypeError: Indexed expression has to be a type, mapping or array (is uint256)
        voteType[msg.sender] = 2;
        ^------^
Compilation failed. See above.

La expresión indexada es una asignación a un tipo ( uint) que debería estar todo bien.

Código relevante:

function castVote (uint voteType) canVote {
//        require (voteType[msg.sender] == 0);
        if (voteType == 2) {//2 here meaning "Real" account.
        count[upForVote].voteReal++;
        voteType[msg.sender] = 2;
        }
        if (voteType == 1) {//1 here meaning "Fake" acount.
        count[upForVote].voteFake++;
        voteType[msg.sender] = 1;
        }
        voteInProgress[msg.sender] = true;
    }
¿ Puedes agregar una declaración de voteTypepor favor?

Respuestas (1)

Su función acepta un parámetro llamado voteType, y es un uint. Por lo tanto, no puede indexarlo, porque no es un arrayo un mapping.

Supongo que en otro lugar declaraste una variable de estado también llamada voteType, pero el nombre del parámetro la oculta en esta función.

Una convención en estos casos es usar un guión bajo inicial para diferenciar, aunque eso suele ser para el caso en que ambas variables tienen el mismo tipo:

function castVote (uint _voteType) canVote {
    if (_voteType == 2) {  //2 here meaning "Real" account.
        count[upForVote].voteReal++;
        voteType[msg.sender] = 2;
    }
    if (_voteType == 1) {  //1 here meaning "Fake" acount.
        count[upForVote].voteFake++;
        voteType[msg.sender] = 1;
    }
    voteInProgress[msg.sender] = true;
}