Fehler von Remix: „ParserError: Expected primary expression“

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.

Wenn Sie einen Wert zurückgeben, verwenden Sie den Singular returnnot returns.
Ich habe Returns in Return geändert und bekomme jetzt zwei Fehler: function Election(string _name) public { owner = msg.sender; Wahlname = _name; } function addCanditate(string _name) ownerOnly public { Kandidaten.push(Kandidat(_name, 0)); } in diesen Funktionen

Antworten (3)

In Ihrem Vertragscode nach dem Korrigieren returnsvon returngibt 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); }

}
Danke, Bruder, jetzt ist alles in Ordnung, aber wenn ich diesen Vertrag bereitstellen möchte, bekomme ich einen Fehler: Erstellung von Wahlfehler: Fehler beim Codieren von Argumenten: SyntaxError: Unexpected token h in JSON at position 1
Nein, Bruder, ich habe meinen Code kopiert und in den Remix eingefügt, und er wird ohne Fehler erfolgreich bereitgestellt. Wenn möglich, kopieren Sie meinen Code und fügen Sie ihn so ein, wie er ist, und wählen Sie die Compiler-Version aus version:0.5.0+commit.1d4f565a.Emscripten.clang.
Ich möchte dieser Wahl einen Namen geben, z. B. "bester Schüler der Klasse".
[![hier Bildbeschreibung eingeben][1]][1] [1]: i.stack.imgur.com/jI96x.png Ich möchte dieser Wahl einen Namen geben wie „Bester Schüler der Klasse“, den ich bekommen habe dieser Fehler: [![Bildbeschreibung hier eingeben][1]][1] [1]: i.stack.imgur.com/yM2Su.png
Sie geben den String-Wert ein und erinnern sich, dass Remix immer den String mit in nimmt " ". Sie müssen also Best student in the classals "Bester Schüler der Klasse" eintreten . Weitere Informationen finden Sie im Bild [ i.stack.imgur.com/7K67E.png]
Vielen Dank, Bruder. Ich möchte Ihnen noch eine Frage stellen. Wenn ich den Namen des Kandidaten sehen möchte, welchen Code muss ich schreiben? als gäbe es drei Kandidaten "Tom", "jerry" und Bell, also wie kann ich den Namen in meinem Vertrag sehen?

Sie haben mehrere Fehler in Ihrem Code. Erstens verwenden wir gemäß dem Kommentar von @shawn für die Rückgabe eines Werts returnnicht returnswie andere Sprachen. Auch a structhat kein Mitglied length. Wenn Sie also nach der Länge des candidatesArrays suchen. Sie sollten es schreiben als:

function getNameCandidate() public view returns(uint){
    return candidates.length;
}
Ich habe Returns in Return geändert und bekomme jetzt zwei Fehler: function Election(string _name) public { owner = msg.sender; Wahlname = _name; } function addCanditate(string _name) ownerOnly public { Kandidaten.push(Kandidat(_name, 0)); } in diesen Funktionen
Bitte aktualisieren Sie die Frage mit neuen Fehlern

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