Vollständiger Quellcode der Datei 'Test.sol' :
pragma solidity ^0.4.23;
contract Mortal{
address owner;
string ownerInfo = "Contract Owner name XYZ";
constructor () public {
owner = msg.sender;
}
function kill () public {
if (msg.sender == owner) {
selfdestruct(owner);
}
}
function ownerInfo() public view returns (string) {
return ownerInfo;
}
}
contract Test is Mortal {
string message = "Hello World!";
constructor () public {
}
function getMessage() public view returns (string){
return message;
}
}
Compiler-Fehler:
myMac:solidity admin$ solc Test.sol
Test.sol:21:2: Error: Identifier already declared.
function ownerInfo() public view returns (string) {
^ (Relevant source part starts here and spans across multiple lines).
Test.sol:9:2: The previous declaration is here:
string ownerInfo = "Contract Owner name XYZ";
^------------------------------------------^
Ich sehe keine doppelte Deklaration von ownerInfo
. Irgendeine Idee, warum erhalte ich diesen Fehler?
Die Antwort von @Hari GTT Psicolabis ist richtig, aber das bedeutet, dass Sie das ownerInfo
Feld so angeben müssen, dass Sie public
von einem öffentlichen Getter profitieren.
string public ownerInfo = "Contract Owner name XYZ";
Die Alternative besteht darin, den Namen Ihrer Funktion zu ändern.
Dies liegt daran, dass die Methode und die Eigenschaft denselben Namen haben. Da solidity automatisch eine öffentliche Getter-Funktion für jede öffentliche Variable im Vertrag erstellt, brauchen Sie das nichtfunction ownerInfo() public view returns (string)
Hari GTT Psicolabis
RafiAlhamd
string ownerInfo = "x"; function getOwnerInfo() public view returns (string) { return ownerInfo; }
. @hari-gtt-psicolabis, Danke! Nur das Deklarieren von Variablenpublic
funktioniert auch:string public ownerInfo = "x"; function ownerInfo() public view returns (string) { return ownerInfo; }
. Ich habe die Antwort von @mirg akzeptiert, da das Offenlegen des Attributs als „öffentlich“ keine gewünschte Lösung ist. Habe aber positiv abgestimmt :-)