Error: Operador == no compatible con tipos dirección y bytes32

¿Cómo puedo cambiar la última línea en el siguiente código para que funcione?

contract University { 
    address public owner; 
    address public student; 
    bytes32 fName; 
    bytes32 lName; 
    bytes32 Studies; 
    bytes32 private caCertificate; 
    bytes32 ipfs_hash;

    constructor() public { 
        owner = msg.sender; 
    } 

     modifier onlyOwner() { if (msg.sender == owner) _; } 
     modifier onlyOwnerOrStudent() { 
         if (msg.sender == owner || msg.sender == student) _; 

    .....
}

Recibo el mensaje de error:

Operador == no compatible con tipos dirección y bytes32

¿Puede incluir la parte del código donde se inicializan estas variables? Parece que son de diferentes tipos, lo que está causando el error...
contrato Universidad dirección public propietario dirección public estudiante bytes32 fName bytes32 lName bytes32 Estudios constructor() public { propietario = msj.sender; } modificador onlyOwner() { if (msg.sender == propietario) _; } modificador onlyOwnerOrStudent() { if (msg.sender == propietario || msg.sender == estudiante) _; } function establecerestudiante() function obtenerEstudiante(); evento estudiante( bytes32 fName, bytes32 lName, bytes32 Estudios ); función verificarEstudianteExiste() public constante devuelve (bool) { if (estudiante == lName) devuelve verdadero;}
El código de los comentarios suele ser ilegible debido al formato. (Ese código también parece estar alterado de otras maneras; no se compilaría). Edite su pregunta con el código fuente correcto.
contrato Universidad { domicilio publico titular; estudiante de dirección pública; bytes32 fNombre; bytes32 lNombre; bytes32 Estudios; bytes32 caCertificado privado; bytes32 ipfs_hash; constructor() public { propietario = mensaje.remitente; } modificador onlyOwner() { if (msg.sender == propietario) _; } modificador onlyOwnerOrStudent() { if (msg.sender == propietario || msg.sender == estudiante) _;
función conjuntoestudiante (); función obtenerEstudiante(); evento estudiante( bytes32 fName, bytes32 lName, bytes32 Estudios, bytes32 ipfs_hash ); función verificarEstudianteExiste() public constante devuelve (bool) { if (estudiante == lName) devuelve verdadero; }
está comparando tipos de datos de addressy bytes32 for equality. Dado que son dos tipos de datos, el operador no está permitido. necesita hacer que estudiante sea bytes32o fName addressdependiendo de su caso de uso
¿Qué hace bytes32Equal en esta situación? for (i = 0; i < numRegData; i++) { if (bytes32Equal(getRegDataHash(i), _hash) == true) { _revokeDate = getDeletedRegDat(i); if (_revokeDate == 0) { return (0, addrParent, _newHash); } ¿Se puede reemplazar por otra cosa?
Es difícil responder una pregunta separada como esa, creo que es mejor responder una nueva pregunta y poner su código formateado allí para que sea legible :)

Respuestas (1)

está comparando tipos de datos de addressy bytes32para la igualdad. Dado que son dos tipos de datos, el operador no está permitido. necesita hacer studentpara bytes32o fNamepara addressdependiendo de su caso de uso.