test()
Warum wirft der angehängte Vertrag immer einen ungültigen Opcode, wenn ich und verify()
(in dieser Reihenfolge) ausführe ?
pragma solidity ^0.4.10;
contract Parent
{
uint value;
function isValueOne() public constant returns (bool) {
return value == 1;
}
}
contract Child is Parent
{
uint public value;
function test() public {
value = 1;
}
function verify() {
require(isValueOne());
}
}
Nach meinem Verständnis sollte dies niemals der Fall sein. Ich habe die Dokumente über Vererbung gelesen und konnte nicht herausfinden, was los ist. Nach dem Umzug isValueOne
funktioniert Child
alles.
Ich habe diesen Code auf testrpc und remix mit den gleichen Ergebnissen getestet.
Ihr Code schlägt aus mehreren Gründen fehl.
1- Die Funktion verify() ist nicht als Konstante gekennzeichnet. Es sollte als konstant markiert werden, da es Daten liest und nicht schreibt. (Wenn Sie dies beheben, wird der Fehler, den Sie erhalten, behoben).
2- Selbst wenn dieser Fehler behoben ist, funktioniert der Vertrag nicht wie beabsichtigt, da Sie den öffentlichen Wert von uint im untergeordneten Element deklarieren, wodurch die Deklaration der Variablen mit demselben Namen/Typ im übergeordneten Element überschattet wird.
So sollte Ihr Code aussehen, damit er funktioniert:
pragma solidity ^0.4.10;
contract Parent
{
uint public value;
function isValueOne() public constant returns (bool) {
return (value == 1);
}
}
contract Child is Parent
{
function test() public {
value = 1;
}
function verify() constant returns (bool) {
require(isValueOne());
return true;
}
}
Benutzer8754979
constant
derzeit nichts getan wird. Was würde dazu führen, dass dies hier fehlschlägt? Dies sollte unbedingt dokumentiert werden.pabloruiz55
Benutzer8754979
verify()
und eine Eigenschaft aktualisiere und daher entferneconstant
, schlägt dieser Code fehl. Ich denke nicht, dass das richtig istpabloruiz55
Benutzer8754979
value
in neu definiert habeChild
. Der Compiler sollte in diesem Fall einen Fehler ausgeben, dieses Problem ist bereits auf github github.com/ethereum/solidity/issues/2563 geöffnet (ich konnte dies finden, nachdem ich an das Shadowing erinnert wurde.)