pragma solidity ^0.5.0;
contract Election{
  //model a candidates
  struct candidate
    uint id;
    string name;
    uint votecount;
  //store candidates
  //fetch candidate

  mapping(uint => candidate) public candidates;

  //store candidate count

  uint public candidatescount;

  function () Election public {
  function addcandidate (string _name) private
    candidatecount ++;
    candidates[candidatescount] = candidate(candidatescount, _name, 0);

As long as string is dynamically-sized type, modern version of Solidity compiler require location to be explicitly specified like this:

function addcandidate (string memory _name) private


function addcandidate (string storage _name) private

For your purpose memory looks more relevant.

In both cases, _name is passed by reference, but in the former case the reference is address in memory, while in the latter case the reference is address in storage.

| improve this answer | |

Not the answer you're looking for? Browse other questions tagged or ask your own question.