Reputation: 91
I'm making a contract in Solidity, and upon compilation, i get the following error: 'Expected pragma, import directive or contract/interface/library definition. function MyToken() { ^' What causes this?
pragma solidity ^0.14.18;
contract MyToken {
/* This creates an array with all balances */
mapping (address => uint256) public balanceOf;
}
function MyToken() {
balanceOf[msg.sender] = 21000000;
}
/* Send coins */
function transfer(address _to, uint256 _value) {
/* Add and subtract new balances */
balanceOf[msg.sender] -= _value;
balanceOf[_to] += _value;
}
function transfer(address _to, uint256 _value) {
/* Check if sender has balance and for overflows */
require(balanceOf[msg.sender] >= _value && balanceOf[_to] + _value >= balanceOf[_to]);
/* Add and subtract new balances */
balanceOf[msg.sender] -= _value;
balanceOf[_to] += _value;
}
/* Initializes contract with initial supply tokens to the creator of the contract */
function MyToken(uint256 initialSupply, string tokenName, string tokenSymbol, uint8 decimalUnits) {
balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens
name = tokenName; // Set the name for display purposes
symbol = tokenSymbol; // Set the symbol for display purposes
decimals = decimalUnits; // Amount of decimals for display purposes
}
event Transfer(address indexed from, address indexed to, uint256 value);
/* Notify anyone listening that this transfer took place */
Transfer(msg.sender, _to, _value);
Upvotes: 0
Views: 208
Reputation: 43521
pragma solidity ^0.14.18;
There's no version 0.14.18
, the latest is currently (June 2021) 0.8.4
. I'm guessing this is just a typo and your code defines ^0.4.18
, because you're using the "contract name" function as a constructor (was deprecated in favor of the constructor()
function in 0.5
), and because the error message "Expected pragma..." appears after fixing to ^0.4.18
.
Expected pragma, import directive or contract/interface/library definition. function MyToken() { ^
It's caused by the redundant closing brace }
after the mapping.
contract MyToken {
/* This creates an array with all balances */
mapping (address => uint256) public balanceOf;
} // <-- here is the redundant closing brace
function MyToken() {
balanceOf[msg.sender] = 21000000;
}
// rest of your code
You can fix it by removing the redundant closing brace }
after the mapping. Or better moving it to the last line, because the contract is missing the closing brace at the end.
contract MyToken {
/* This creates an array with all balances */
mapping (address => uint256) public balanceOf;
function MyToken() {
balanceOf[msg.sender] = 21000000;
}
// ... rest of your contract
} // <-- moved to the end of the contract
Note: You have few more syntax errors in your code, pay attention to the error messages and warnings from the compiler.
Upvotes: 0