Contract-Debugging

返回子對象的公共屬性

  • January 27, 2017

我想我錯過了一些非常簡單的東西。以下合約

contract Genobject{
uint public item;
function Genobject(uint _val){
   item=_val;}
}

contract Caller{
  Genobject public instance;
  function Caller(){
      instance= new Genobject(3);
  }
  function Recall() returns (uint){
     return Genobject.item; }
}

給出這個錯誤

MultiConstructor.sol:27:16:錯誤:成員“項目”在類型(契約 Genobject)中依賴於參數的查找後未找到或不可見

   return Genobject.item;
          ^------------^

我所有的類型都是相同的,並且“項目”是公開聲明的,因此它應該是可讀的。怎麼了?

提前致謝

這是您的程式碼,已修改:

pragma solidity ^0.4.4;

contract Genobject {
   uint public item;

   function Genobject(uint _val) {
       item = _val;
   }
}

contract Caller {
  Genobject public instance;

  function Caller() {
      instance = new Genobject(3);
  }

  function recall() constant returns (uint) {
       return instance.item();
  }
} 

以下是展示您的合約執行的 Browser Solidity 的螢幕截圖:

在此處輸入圖像描述

以下是我所做的更改:

  1. 重命名Recall()recall().
  2. recall()函式標記constant為該函式不修改數據,而是返回數據。
  3. recall()函式返回變數的item()instance而不是類Genobject
  4. item``recall()由自動生成的item()公共函式訪問。

引用自:https://ethereum.stackexchange.com/questions/11708