Das ist mein Code:
pragma solidity>0.4.99<0.6.0;
contract Election {
struct Candidate {
string name;
uint voteCount;
}
struct Voter {
bool authorized;
bool voted;
uint vote;
}
address public owner;
string public electionName;
mapping(address => Voter) public voters;
Candidate[] public candidates;
uint public totalVotes;
modifier ownerOnly(){
require(msg.sender == owner);
_;
}
function Election(string _name) public {
owner = msg.sender;
electionName = _name;
}
function addCanditate(string _name) ownerOnly public {
candidates.push(Candidate(_name, 0));
}
function getNameCandidate() public view returns(uint){
returns Candidate.length;
}
function authorize (address _person) ownerOnly public {
voters[_person].authorized = true;
}
function vote (uint _voteIndex) public {
require(!voters[msg.sender].voted);
require(voters[msg.sender].authorized);
voters[msg.sender].vote = _voteIndex;
voters[msg.sender].voted = true;
Candidates[_voteIndex].voteCount += 1;
totalVotes += 1;
}
function end() ownerOnly public {
selfdestruct(owner);
}
}
Ich stehe hier vor einem Problem:
function getNameCandidate() public view returns(uint){
returns Candidate.length;
}
es zeigt mir diesen Fehler:
browser/Test.sol:38:5: ParserError: Expected primary expression.
returns Candidate.length;
^-----^
Wie löse ich dieses Problem? Vielen Dank im Voraus.
In Ihrem Vertragscode nach dem Korrigieren returns
von return
gibt es viele Fehler.
Verweisen Sie einfach auf diesen Code für Änderungen, bei denen Fehler in Ihrem Code auftreten, und Sie können frei Fragen zu Änderungen in einem Kommentar stellen, wenn Sie sie nicht erhalten.
pragma solidity>0.4.99<0.6.0;
contract Election {
struct Candidate {
string name;
uint voteCount; }
struct Voter {
bool authorized;
bool voted;
uint vote; }
address public owner; string public electionName;
mapping(address => Voter) public voters; Candidate[] public candidates; uint public totalVotes;
modifier ownerOnly(){
require(msg.sender == owner);
_; }
constructor (string memory _name) public {
owner = msg.sender;
electionName = _name; }
function addCanditate(string memory _name) ownerOnly public {
candidates.push(Candidate(_name, 0)); }
function getNameCandidate() public view returns(uint){
return candidates.length; }
function authorize (address _person) ownerOnly public {
voters[_person].authorized = true; }
function vote (uint _voteIndex) public {
require(!voters[msg.sender].voted);
require(voters[msg.sender].authorized);
voters[msg.sender].vote = _voteIndex;
voters[msg.sender].voted = true;
candidates[_voteIndex].voteCount += 1;
totalVotes += 1; } function end() ownerOnly public {
selfdestruct(msg.sender); }
}
version:0.5.0+commit.1d4f565a.Emscripten.clang
." "
. Sie müssen also Best student in the class
als "Bester Schüler der Klasse" eintreten . Weitere Informationen finden Sie im Bild [ i.stack.imgur.com/7K67E.png]Sie haben mehrere Fehler in Ihrem Code. Erstens verwenden wir gemäß dem Kommentar von @shawn für die Rückgabe eines Werts return
nicht returns
wie andere Sprachen. Auch a struct
hat kein Mitglied length
. Wenn Sie also nach der Länge des candidates
Arrays suchen. Sie sollten es schreiben als:
function getNameCandidate() public view returns(uint){
return candidates.length;
}
Mit den neuen Versionen von Solidity ist der Konstruktor also nicht mehr als Funktion mit dem gleichen Namen wie der Vertrag definiert. Definieren Sie die folgende Funktion wie folgt:
Diese Funktion:
function Election(string _name) public { owner = msg.sender; Wahlname = _name; } sollte wie folgt deklariert werden: constructor(string _name) public { owner = msg.sender; Wahlname = _name; }
Auch in den neueren Versionen von Solidity müssen Sie definieren, wo einige Variablen gespeichert werden. Fügen Sie also einfach Speicher zur nächsten Funktion hinzu, wie unten angegeben:
function addCanditate(string memory _name) ownerOnly public { Kandidaten.push(Kandidat(_name, 0)); }
Shawn Tabrizi
return
notreturns
.Abbas