Fehler: Operator == nicht kompatibel mit den Typen address und bytes32

Wie kann ich die letzte Zeile im folgenden Code ändern, damit es funktioniert?

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) _; 

    .....
}

Ich bekomme die Fehlermeldung:

Operator == nicht kompatibel mit den Typen address und bytes32

Können Sie den Teil des Codes einfügen, in dem diese Variablen initialisiert werden? Es scheint, als wären sie von unterschiedlichem Typ, was den Fehler verursacht ...
Vertrag Universitätsadresse öffentlich Eigentümeradresse öffentlich Student bytes32 fName bytes32 lName bytes32 Studium constructor() public { owner = msg.sender; } modifier onlyOwner() { if (msg.sender == owner) _; } modifier onlyOwnerOrStudent() { if (msg.sender == Eigentümer || msg.sender == Student) _; } Funktion setstudent () Funktion getStudent (); event student( bytes32 fName, bytes32 lName, bytes32 Studies ); function checkStudentExists() öffentliche Konstante gibt zurück (bool) { if (student == lName) return true;}
Code in Kommentaren ist aufgrund von Formatierungen oft nicht lesbar. (Dieser Code scheint auch auf andere Weise verstümmelt zu sein; er würde nicht kompiliert.) Bitte bearbeiten Sie Ihre Frage mit dem richtigen Quellcode.
Vertrag Hochschule { Adresse öffentlicher Träger; Adresse öffentlicher Student; bytes32 fName; bytes32 lName; bytes32 Studien; bytes32 privates caCertificate; bytes32 ipfs_hash; Konstruktor () public { Eigentümer = msg.sender; } modifier onlyOwner() { if (msg.sender == owner) _; } modifier onlyOwnerOrStudent() { if (msg.sender == Eigentümer || msg.sender == Student) _;
Funktion setstudent (); Funktion getStudent (); event student( bytes32 fName, bytes32 lName, bytes32 Studien, bytes32 ipfs_hash ); Funktion checkStudentExists() öffentliche Konstante gibt zurück (bool) { if (student == lName) return true; }
Sie vergleichen Datentypen von addressund bytes32 for equality. Da es sich um zwei Datentypen handelt, ist ein Operator nicht zulässig. Sie müssen je nach Anwendungsfall entweder student to bytes32oder fName to machenaddress
Was macht bytes32Equal in dieser Situation? for (i = 0; i < numRegData; i++) {if (bytes32Equal(getRegDataHash(i), _hash) == true) {_revokeDate = getDeletedRegDat(i); if (_revokeDate == 0) { return (0, addrParent, _newHash); } Kann es durch etwas anderes ersetzt werden?
Es ist schwer, eine separate Frage wie diese zu beantworten. Ich denke, es ist besser, eine neue Frage zu beantworten und Ihren Code dort formatiert abzulegen, um ihn lesbar zu machen :)

Antworten (1)

Sie vergleichen Datentypen von addressund bytes32für Gleichheit. Da es sich um zwei Datentypen handelt, ist ein Operator nicht zulässig. Sie müssen je nach Anwendungsfall entweder studentto bytes32oder fNameto machen.address