Error de Remix: "ParserError: expresión principal esperada"

Este es mi código:

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

}

Estoy enfrentando un problema aquí:

function getNameCandidate() public view returns(uint){
    returns Candidate.length;
}

me esta mostrando este error:

browser/Test.sol:38:5: ParserError: Expected primary expression.
    returns Candidate.length;
    ^-----^

¿Cómo soluciono este problema? Gracias de antemano.

Cuando devuelves un valor, usas el singular returnnot returns.
Cambié return to return y ahora tengo dos errores: function Election(string _name) public { propietario = msg.sender; elecciónNombre = _nombre; } function addCanditate(string _name) ownOnly public { candidatos.push(Candidate(_name, 0)); } en estas funciones

Respuestas (3)

En su código de contrato después de corregir returnshay returnmuchos errores.

Simplemente consulte este código para ver los cambios en los que enfrenta un error en su código y puede hacer preguntas libremente sobre cualquier cambio en un comentario si no lo recibe.

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

}
gracias, hermano, todo está bien ahora, pero cuando quiero implementar este contrato, recibí un error: creación de Elección con error: error de codificación de argumentos: error de sintaxis: token h inesperado en JSON en la posición 1
No hermano, copié mi código y lo pegué en remix y se despliega exitosamente sin ningún error. Si es posible, copie mi código y péguelo tal como está y seleccione la versión del compilador version:0.5.0+commit.1d4f565a.Emscripten.clang.
Quiero dar un nombre a esta elección como "mejor estudiante de la clase".
[![ingrese la descripción de la imagen aquí][1]][1] [1]: i.stack.imgur.com/jI96x.png Quiero darle un nombre a esta elección como "Mejor estudiante de la clase", así que obtuve este error: [![ingrese la descripción de la imagen aquí][1]][1] [1]: i.stack.imgur.com/yM2Su.png
Usted ingresa el valor de la cadena y recuerda que el remix siempre toma la cadena con in " ". por lo que debe ingresar Best student in the classcomo "Mejor alumno de la clase" . para ver más imágenes [ i.stack.imgur.com/7K67E.png]
Muchas gracias hermano. Quiero hacerte una pregunta más. Si quiero ver el nombre de los candidatos, ¿qué código debo escribir? como si hubiera tres candidatos, "Tom", "jerry" y Bell, ¿cómo puedo ver el nombre en mi contrato?

Tienes varios errores en tu código. Primero, según el comentario de @shawn, para devolver cualquier valor, returnno usamos returnsotros idiomas. Además, a structno tiene un miembro length. Entonces, si está buscando obtener la longitud de la candidatesmatriz. Debes escribirlo como:

function getNameCandidate() public view returns(uint){
    return candidates.length;
}
Cambié return to return y ahora tengo dos errores: function Election(string _name) public { propietario = msg.sender; elecciónNombre = _nombre; } function addCanditate(string _name) ownOnly public { candidatos.push(Candidate(_name, 0)); } en estas funciones
Por favor actualice la pregunta con nuevos errores.

Entonces, con las nuevas versiones de solidity, el constructor ya no se define como una función con el mismo nombre que el contrato. Defina la siguiente función de la siguiente manera:

Esta función:

function Elección (string _name) public { propietario = msg.sender; elecciónNombre = _nombre; } debe declararse como: constructor(string _name) public { propietario = msg.sender; elecciónNombre = _nombre; }

Además, en las versiones más nuevas de solidity, debe definir dónde se almacenarán algunas variables. Por lo tanto, simplemente agregue memoria a la siguiente función como se indica a continuación:

function addCanditate(string memory _name) ownOnly public { candidatos.push(Candidate(_name, 0)); }