代码之家  ›  专栏  ›  技术社区  ›  Eli D.

指针指向类数组的指针算法

  •  -3
  • Eli D.  · 技术社区  · 7 年前

    我对bag ADT的此代码有问题。我使用一个指针数组,该数组由一个单独的类组成,该类存储一个字符串和一个int。

    ArrayBag::ArrayBag(int length){
      list = new ReceiptArray [length];
      size = length;
      n= 0;
    }
    
    int ArrayBag::getCurrentSize(){return n;};
    
    bool ArrayBag::isEmpty() {
      if (!(n==0)){
        return 1;
        cout << "has items"<< endl;
      }
      else{
        cout << "empty" << endl;
        return 0;
      }
    }
    
    bool ArrayBag::add(string item){
      if (!(n==size)){
    
        (*list+n.item) = item;
        (*list+n.itemnum) = n+1;
    

    上面的指针算术行被证明是困难的

        n++;
        return 1;
      }
      else{
        cout << "bag full" << endl;
        return 0;}
    }
    
    bool ArrayBag::remove(string item){
      for(int k=0;k<n;k++){
    

    这里也是

        if ((*list+k.item) ==  item){
          (*list+k.item) = (*list+n.item);
    
    
          n--;
          return true;
        }
      }
      return false;
    }
    
    void ArrayBag::clear(){n=0;}
    
    int ArrayBag::getFrequencyOf(string item){
      int frequency = 0;
      for(int k=0;k<n;k++){
        if(*list+k.item == item){
          ++frequency;}
      }
      return frequency;
    }
    
    
    bool ArrayBag::contains(string item){
      for(int k=0;k<n;k++){
        if(*list+k.item == item){
          return 1;
        }
      }
      return 0;
    }
    

    错误

      error: request for member ‘item’ in ‘((ArrayBag*)this)->ArrayBag::n’, which is of non-class type ‘int’
     (*list+n.item) = item;
    

    我不明白为什么会这样。我想你可以这样索引指针数组。它发生在我尝试添加数组的当前大小以正确索引数组和访问数组成员变量的任何地方。 欢迎提供任何建议

    1 回复  |  直到 7 年前
        1
  •  0
  •   MFisherKDX    7 年前

    您有: (*list+n.item) 哪里 list 是指向 ReceiptArray (您可能应该将类重命名为 接收阵列 Receipt 但这不是你的问题。)

    您有两个问题:

    1) 操作命令问题。第一 *list 是求值的,它返回类型为的对象 接收阵列 . 但你需要增加你的指针 之前 您取消引用它。

    2) 接下来尝试添加 n.item 到该对象。但是 n 是一个 int 而且没有 item 成员因此出现了错误。

    您需要: (*(list+n)).item = item;

    或: (list+n)->item = item

    或者简单地说: list[n] = item;